需要有laravel角色的指南

时间:2017-07-03 03:10:16

标签: php laravel-5

我希望在过去使用Laravel 5.4开始新项目我过去常常使用不同的user_types表但是对于这个项目,我想使用默认的users表来表示所有类型的用户只是将他们的访问权限(角色)分开,我不知道该怎么做,这就是为什么我需要它的指南。

PS:对于那些可能想要代码的朋友,还没有代码!在开始编码之前我需要领导,所以请不要评论垃圾邮件。

亲切的问候。

1 个答案:

答案 0 :(得分:0)

假设用户可以拥有多个角色,那么要做到这一点..首先,您必须有3个表.. tbl_userstbl_user_rolestbl_roles其中

<强> tbl_users

id
username
password
someotherfields

<强> tbl_user_roles

id
user_id
role_id

<强> tbl_roles

id
rolename

然后在你的model user中,您必须为角色分配关系。

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

现在你有角色..现在如何根据角色设置页面限制..你要做的就是拥有一个中间件..这是如何:

在终端运行中创建一个名为RolePermission的中间件

php artisan make:middleware RolePermission

然后是它的内容

public function handle($request, Closure $next, $roles)
{
    $roles = explode('|',$roles);
    $userRoles = Auth::user()->roles;
    foreach($userRoles as $role)
    {
        if(in_array($role->id, $roles))
        {
            return $next($request);
        }
    }

    // Redirect
    return redirect()->back();
}

它的作用基本上是检查authed用户列表角色是否在允许使用页面的角色中。

然后在路由文件中添加对页面的限制,例如假设角色管理员具有id:1,主持人ID:2。SimpleUser id:3然后页面User Management要求您作为管理员进入,然后有这个:

// Group of route that will only be accessible for Users with Level = 1 (Administrator)
Route::group( ['middleware' => 'rolePermissions:1'], function(){
    Route::get('/users',['as'=>'users', 'uses'=>'PagesController@users']);
}

// Multiple roles for a page
Route::group( ['middleware' => 'rolePermissions:1|2|3|4'], function(){
    // routes here
}

此外,该中间件尚未运行..您必须编辑内核并将其添加到受保护的$ routeMiddleware下。

'rolePermissions' => \App\Http\Middleware\RolePermissions::class,

并且它已全部设置,欢呼......您现在对经过身份验证的用户角色有页面限制..