这不仅是拥有一组用户,而且是权限组。这是数据库模式的外观:数据库模式
我将数据库关系定义为这些:
usermodel.php
public function roles()
{
return $this->belongsToMany('AppModelsRoleModel', 'role_member', 'user_id', 'role_id');
}
rolemodel.php
public function permissions(){
return $this->belongsToMany('AppModelsPermissionModel' , 'role_permission' , 'role_id' , 'permission_id');
}
我应该有我的中间件来传递权限,并决定拒绝或查看所请求的路由或访问基础。拥有Auth::user
权限数组并降低重复值的任何想法,或以更好的方式执行此操作?
最后,我认为可以。有更好的解决方案吗?
public function permissions()
{
$user_permissions = [];
foreach ($this->roles as $role){
foreach ($role->permissions as $permission)
{
array_push($user_permissions , $permission->permission);
}
}
$user_permissions = array_unique($user_permissions);
return $user_permissions;
}
这是我用来检查验证用户访问级别的中间件。
public function handle($request, Closure $next , $param)
{
$user_permissions = Auth::user()->permissions();
if (in_array($param , $user_permissions))
return $next($request);
return abort(403);
}
现在将中间件定义为AccessLevel
中间件,将其在路由之类的每一个位置使用,然后以这种方式发送参数。 Route::post('create_new_profile', 'AdminProfileController@create', ['middleware' => 'AccessLevel:create_new_profile']);