我正在项目中进行授权。我已经创建了角色和权限,可以很好地工作。
有一个用户表,角色表,权限表以及这些表之间的多对多关系设置。当我执行$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的”方法。尽管我可以在“策略”中对此进行拆分,但是应该有更好的方法,对吗?看来这扇大门要在里面进行很多检查。
我如何正确地做到这一点?