我希望在过去使用Laravel 5.4
开始新项目我过去常常使用不同的user_types
表但是对于这个项目,我想使用默认的users
表来表示所有类型的用户只是将他们的访问权限(角色)分开,我不知道该怎么做,这就是为什么我需要它的指南。
PS:对于那些可能想要代码的朋友,还没有代码!在开始编码之前我需要领导,所以请不要评论垃圾邮件。
亲切的问候。
答案 0 :(得分:0)
假设用户可以拥有多个角色,那么要做到这一点..首先,您必须有3个表.. tbl_users
,tbl_user_roles
和tbl_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,
并且它已全部设置,欢呼......您现在对经过身份验证的用户角色有页面限制..