public function setRoles(array $roleIds) { DB::beginTransaction(); $new_roles = array_diff($roleIds, $this->roles); $exist_roles = array_intersect($roleIds, $this->roles); $deleted_roles = array_diff($this->roles, $roleIds); $new_role_saved = []; $roleProviders = AclFacade::getRoleProvidersTypes(); foreach ($roleProviders as $rp_type) { $rp = AclFacade::getRoleProvider($rp_type); if ($rp->allowUpdateRole()) { $roles_to_delete = $deleted_roles ? $rp->getRoles($deleted_roles)->lists('role_id') : []; if ($roles_to_delete) { UserRole::where('user_id', '=', $this->getKey())->whereIn('role_id', $roles_to_delete)->delete(); } $roles = $new_roles ? $rp->getRoles($new_roles) : []; foreach ($roles as $role) { $role_id = $role->role_id; UserRole::create(['user_id' => $this->user_id, 'role_id' => $role_id]); $new_role_saved[] = $role_id; } } } DB::commit(); $this->roles = array_merge($exist_roles, $new_role_saved); Event::fire('acl_role_updated', array($roleIds)); $cache_prefix = Config::get('acl::cache_key', '_volicon_acl_'); Cache::forever($cache_prefix . '_last_role_update', new MicrotimeDate()); }
public function remove() { if ($this->attributes['default']) { throw new NoPermissionsException("You cannot remove default role."); } if (!isset($this->attributes['role_id']) || !$this->attributes['role_id']) { throw new NoPermissionsException("missing role_id"); } /* @var $role_provider RoleProviders\AclRoleProvider */ $role_provider = AclFacade::getRoleProvider($this->attributes['type']); $result = $role_provider->removeRole($this->attributes['role_id']); if ($result) { Event::fire('acl_role_removed', array($result)); } return $result; }