具有自定义门的Laravel授权

时间:2018-08-03 16:40:37

标签: php laravel authorization

我正在项目中进行授权。我已经创建了角色和权限,可以很好地工作。

有一个用户表,角色表,权限表以及这些表之间的多对多关系设置。当我执行$user->hasPermissionTo($permission)时,会根据用户是否有权执行某操作而生错病。

这与Laravel的can方法一起使用,因为我创建了一个自定义Gate。

Permission::get()->map(function ($permission) {
    Gate::define($permission->name, function ($user, $model=null) use ($permission) {
        if (!$model) {
            return $user->hasPermissionTo($permission);
        }

        return $user->id === $model->user_id // Allow models the current user owns
            || $user->hasPermissionTo($permission) // User has permission anyways (based on user or based on role permissions)
            || (get_class($user) === get_class($model) && $user->id === $model->id); // Current user his own User-model
    });
});

但是正如您所看到的,我接受模型实例。之后,我需要检查其是否通过,以便可以进行检查;
-如果用户拥有该模型(按关系),
-如果用户通过角色或
具有权限 -如果它是当前登录的用户的用户模型。
如果没有传递任何模型,只需通过角色检查权限即可。

但是我不认为这是“类似Laravel的”方法。尽管我可以在“策略”中对此进行拆分,但是应该有更好的方法,对吗?看来这扇大门要在里面进行很多检查。

我如何正确地做到这一点?

0 个答案:

没有答案