【问题标题】:Multiple Authentication in Laravel 5.3Laravel 5.3 中的多重身份验证
【发布时间】:2017-01-25 10:04:00
【问题描述】:

如何在 Laravel 5.3 中为两个不同的表(用户和管理员)设置多重身份验证。

Laravel 默认有用户模型。

【问题讨论】:

    标签: laravel laravel-5.3


    【解决方案1】:

    看起来您需要实现角色。你可以使用默认的 Laravel 用户模型,并且需要创建一个角色模型:

    用户模型

    ...
    public function role() {
        return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id');
    }
    
    public function inRole($role) {
        return (bool) $this->role()->where('name', '=', $role)->count();
    }
    ...
    

    榜样

    ...
    public function users() {
        return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
    }
    ...
    

    除了用户表之外,您还需要创建 2 个表:

    Table users
    
    id | name
    ---------
    1  | John
    2  | Michael
    
    Table roles
    
    id | name
    ---------
    1  | Admin
    2  | Member
    
    Table user_roles
    
    id | user_id | role_id
    ----------------------
    1  |    1    |    1   
    2  |    2    |    1
    

    现在您可以为您拥有的不同角色实施不同的权限。您可以使用 Policies 或 Gates 定义权限。有关如何执行此操作的更多信息,请查看documentation

    现在要将您的成员重定向到 /users/home 并将管理员重定向到 /admin/dashboard,您可以执行以下操作:

    您在 AuthServiceProvider 中定义 adminAccess:

    public function boot() {
        $this->registerPolicies();
        ...
    
        // Define adminAccess
        Gate::define('adminAccess', function ($user) {
            return $user->inRole('admin');
        });
    }
    

    更新: 现在您可以使用这样的中间件来保护您的管理路由:

    public function handle($request, Closure $next) {
        if (Auth::check() && Auth::user()->inRole('admin')) {
            return $next($request);
        }
    
        return redirect('/');
    }
    

    然后在您的 Kernal.php 中的 $routeMiddleware 变量中注册中间件。然后您可以将所有管理路由放在一个组中并在那里使用中间件:

    Route::group(['middleware' => 'auth']) {
        // Define your routes
    }
    

    【讨论】:

    • 如何根据角色进行重定向。用户将被重定向到 users/home 和 admin 将被重定向到 admin/dashboard 并限制具有角色的用户,因为成员无法查看管理仪表板。
    【解决方案2】:

    如果您需要基于守卫的多重身份验证,请尝试 laravel 5.3 https://github.com/Hesto/multi-auth 的这个包

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2017-05-13
      • 2017-02-08
      • 2017-06-18
      • 1970-01-01
      • 2018-07-21
      • 2018-10-17
      相关资源
      最近更新 更多