Laravel 5 new auth:获取当前用户以及如何实现角色?

Posted

技术标签:

【中文标题】Laravel 5 new auth:获取当前用户以及如何实现角色?【英文标题】:Laravel 5 new auth: Get current user and how to implement roles? 【发布时间】:2015-02-18 17:10:30 【问题描述】:

我目前正在试验新的 Laravel 5 并让身份验证工作(注册/登录)。

为了在我的控制器中获取经过身份验证的用户,我目前将Guard 注入到控制器操作中:

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;

class ClientController extends Controller 

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index(Guard $auth)
    
        return view('client.index', ['user' => $auth->user()]);
    
...

第一个问题:这是推荐的方式吗?

第二个问题:我将如何实施某种角色/权限? client.edit, client.add, ... Larval 5 在这里提供某种便利吗? 如何为路由/控制器操作设置必要的角色/权限?

我在想我可能需要为此编写自己的中间件。关于如何解决这个问题的任何建议?

【问题讨论】:

【参考方案1】:

在 Laravel 5 上花费更多时间后,我可以回答我自己的问题:

注入Guard 是推荐的方式吗? 否:如果您需要在您的视图中访问Auth,您可以这样做:

@if( Auth::check() )
    Current user:  Auth::user()->name 
@endif

这使用Auth 外观。所有可用外观的列表位于config/app.php 下的aliases:

如果我在控制器中需要 Auth 怎么办? 像问题中所示注入 Guard 的实例有效,但您不需要。你可以像我们在模板中那样使用Auth门面:

    public function index()
    
        if(\Auth::check() && \Auth::user()->name === 'Don') 
            // Do something
        
        return view('client.index');
    

请注意,由于 L5 使用命名空间,因此在外观名称之前需要 \

我想使用 L5 中的新身份验证机制获得权限/角色: 我使用新的中间件实现了一个轻量级权限模块,它被称为 Laraguard。在 Github 上查看并告诉我你的想法:https://github.com/cgrossde/Laraguard

更新:为了完整起见,我想再提两个项目。它们提供了您在数据库中保存角色和权限所需的一切,并与 Laraguard 完美地协同工作或单独工作:

https://github.com/caffeinated/shinobi https://github.com/romanbican/roles

【讨论】:

您是否为用户角色库创建了过滤路由,我被github.com/romanbican/roles卡住了 没有门面怎么办?【参考方案2】:

如果您想进行自己的自定义身份验证,则需要保留 Laravel 5 中的 User 模型以及所有依赖项。之后,您将能够在控制器中登录您的用户。不要忘记将(使用 Auth;)放在控制器的命名空间之后。

【讨论】:

以上是关于Laravel 5 new auth:获取当前用户以及如何实现角色?的主要内容,如果未能解决你的问题,请参考以下文章

在 Auth::attempt() Laravel 5.1 中禁用重定向

NON Auth::User ID 的 Laravel 回显

如何在 laravel 中获取用户的类型?

异常页面(布局)上的 Laravel 5.2 Auth::check()

Laravel 5.3 auth 检查构造函数返回 false

如何在laravel 5.5中使用令牌从JWTAuth获取用户