场景1:
假设我有一个有3个用户super-admin
,manager
和user
的请假系统。
super-admin
可以欺骗自己提交的叶子以及manager
和user
提交的叶子manager
可以欺骗自己的叶子和user
user
只能欺骗自己的叶子我为给定规则设置了以下权限:
Super Admin
:create-all
,retrieve-all
,update-all
,delete_all
Manager
:create-sub
,retrieve-sub
,update-sub
,delete_sub
User
:create-self
,retrieve-self
,update-self
,delete_self
我不能将其用于编程,因为这会使事情变得非常复杂且难以测试。
我将不得不查看角色是否为user
,然后看到不同的权限,以及用户是否为manager
,然后检查另一个权限。
方案2:
如果我只有create leave
,admin
和manager
这样的权限,例如user
,那么所有人都将具有相同的权限。以下策略足以检查权限:
class LeavePolicy
{
/**
* Determine if the given leave can be updated by the user.
*
* @param \App\User $user
* @param \App\Leave $leave
* @return bool
*/
public function update(User $user, Leave $leave)
{
if($user->roleIs('manager') {
return $user->id === $leave->user->manager_id;
}
elseif($user->roleIs('user') {
return $user->id === $leave->user_id;
}
return false
}
}
但是sceanrio 1的最佳方法是什么?有人可以分享经验吗?谢谢大家!