2016-09-17 177 views

回答

5

看起来你需要实现角色。你可以使用默认的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 

现在你可以实现dif的不同权限你有不同的角色。您可以使用策略或门来定义权限。欲了解更多信息如何做,请检查documentation

我们的成员重定向到/用户/家庭和管理员对/管理/仪表板,你可以做到以下几点:

你在你的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('/'); 
} 

然后注册表r在$routeMiddleware变量中的Kernal.php中的中间件。然后,你可以把你的所有管理路由组中,并使用有中间件:

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

我怎么能基于角色的重定向。用户将被重定向到用户/家庭,管理员将被重定向到管理员/仪表板,并限制具有角色的用户,因为成员无法查看管理员仪表板。 –

+0

检查我更新的答案 – Gadzhev