added bulk permission detachment

This commit is contained in:
Denis Duliçi 2020-07-15 19:12:11 +03:00
parent bd07382dd6
commit 3e36c6c774

View File

@ -43,34 +43,51 @@ trait Permissions
public function attachPermissionsToAllRoles($permissions, $require = 'read-admin-panel') public function attachPermissionsToAllRoles($permissions, $require = 'read-admin-panel')
{ {
$this->getRoles($require)->each(function ($role) use ($permissions) { $this->applyPermissionsToAllRoles('attach', $permissions, $require);
foreach ($permissions as $id => $permission) {
if ($this->isActionList($permission)) {
$this->attachPermissionsByAction($role, $id, $permission);
continue;
}
$this->attachPermission($role, $permission);
}
});
} }
public function detachPermissionsByRoleNames($roles) public function detachPermissionsByRoleNames($roles)
{ {
foreach ($roles as $role_name => $permissions) { foreach ($roles as $role_name => $permissions) {
$role = Role::where('name', $role_name)->first();
if (empty($role)) {
continue;
}
foreach ($permissions as $permission_name) { foreach ($permissions as $permission_name) {
$this->detachPermission($role, $permission_name); $this->detachPermission($role_name, $permission_name);
} }
} }
} }
public function detachPermissionsFromAdminRoles($permissions)
{
$this->detachPermissionsFromAllRoles($permissions, 'read-admin-panel');
}
public function detachPermissionsFromPortalRoles($permissions)
{
$this->detachPermissionsFromAllRoles($permissions, 'read-client-portal');
}
public function detachPermissionsFromAllRoles($permissions, $require = 'read-admin-panel')
{
$this->applyPermissionsToAllRoles('detach', $permissions, $require);
}
public function applyPermissionsToAllRoles($apply, $permissions, $require = 'read-admin-panel')
{
$this->getRoles($require)->each(function ($role) use ($apply, $permissions) {
$f1 = $apply . 'PermissionsByAction';
$f2 = $apply . 'Permission';
foreach ($permissions as $id => $permission) {
if ($this->isActionList($permission)) {
$this->$f1($role, $id, $permission);
continue;
}
$this->$f2($role, $permission);
}
});
}
public function updatePermissionNames($permissions) public function updatePermissionNames($permissions)
{ {
$actions = $this->getActionsMap(); $actions = $this->getActionsMap();
@ -255,7 +272,7 @@ trait Permissions
$role->attachPermission($permission); $role->attachPermission($permission);
} }
public function detachPermission($role, $permission) public function detachPermission($role, $permission, $delete = true)
{ {
if (is_string($role)) { if (is_string($role)) {
$role = Role::where('name', $role)->first(); $role = Role::where('name', $role)->first();
@ -273,7 +290,14 @@ trait Permissions
return; return;
} }
$role->detachPermission($permission); if ($role->hasPermission($permission->name)) {
$role->detachPermission($permission);
}
if ($delete === false) {
return;
}
$permission->delete(); $permission->delete();
} }
@ -289,6 +313,18 @@ trait Permissions
public function attachPermissionsByAction($role, $page, $action_list) public function attachPermissionsByAction($role, $page, $action_list)
{ {
$this->applyPermissionsByAction('attach', $role, $page, $action_list);
}
public function detachPermissionsByAction($role, $page, $action_list)
{
$this->applyPermissionsByAction('detach', $role, $page, $action_list);
}
public function applyPermissionsByAction($apply, $role, $page, $action_list)
{
$function = $apply . 'Permission';
$actions_map = collect($this->getActionsMap()); $actions_map = collect($this->getActionsMap());
$actions = explode(',', $action_list); $actions = explode(',', $action_list);
@ -298,7 +334,7 @@ trait Permissions
$name = $action . '-' . $page; $name = $action . '-' . $page;
$this->attachPermission($role, $name); $this->$function($role, $name);
} }
} }