Сценарий 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? Может кто-нибудь, пожалуйста, поделитесь опытом, пожалуйста. Спасибо всем телом!