laravel访问级别管理(基于关系的用户权限数组)

时间:2019-02-23 08:32:22

标签: php laravel eloquent database-relations

这是我的想法,不仅要有用户组,还要有权限组。这是数据库架构的外观: database schema

我将数据库关系定义如下:

userModel.php

public function roles()
{
    return $this->belongsToMany('App\Models\RoleModel', 'role_member', 'user_id', 'role_id');
}

roleModel.php

public function permissions(){
    return $this->belongsToMany('App\Models\PermissionModel' , 'role_permission' , 'role_id' , 'permission_id');
}

我应该让我的中间件传递许可,并决定基于路由或查看所请求的内容拒绝或访问。有任何想法拥有Auth::user权限数组并拒绝重复值,还是有任何想法以更好的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

最后我这样做是可以的。 有更好的解决方案吗?

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']);