Beispiel #1
0
 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());
 }
Beispiel #2
0
 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;
 }