Ejemplo n.º 1
0
 public function fire()
 {
     $updateRolesOpt = $this->option('update-roles');
     $role_permissions = Config::get("acl::config.roles");
     $group_resources = Config::get("acl::config.group_resources");
     $db_group_resources = GroupResources::all();
     $db_role_permissions = RolePermission::all();
     if (!$db_role_permissions->count()) {
         $updateRolesOpt = true;
     }
     $group_resources_map = array();
     foreach ($db_group_resources as $row) {
         $group_resources_map[$row->resource] = $row->permission_id;
     }
     $this->updateResorces($group_resources_map, $group_resources);
     $this->updateRolesResources();
     if ($updateRolesOpt && count($role_permissions)) {
         // if there new roles add them, don't delete not list role
         $roles = Acl::getRoles();
         $rolesMap = array();
         foreach ($roles as $row) {
             $rolesMap[$row->name] = $row->role_id;
         }
         Acl::runUnguardCallback(function () use($role_permissions, $rolesMap) {
             foreach ($role_permissions as $role) {
                 $aclRole = new AclRole($role);
                 $role_name = $role['name'];
                 if (isset($rolesMap[$role_name])) {
                     $role['role_id'] = $rolesMap[$role_name];
                     $aclRole = new AclRole($role);
                     $aclRole->update();
                 } else {
                     $aclRole = new AclRole($role);
                     $aclRole->add();
                 }
             }
         });
         $roles_ids = array_values($rolesMap);
         if (count($roles_ids)) {
             UserRole::whereNotIn('role_id', $roles_ids)->delete();
         }
     }
 }
Ejemplo n.º 2
0
 public static function updateRoleUsers(AclRole $role)
 {
     $current_users = UserRole::where('role_id', '=', $role->role_id)->lists('user_id');
     $users_to_delete = array_diff($current_users, $role->users->toArray());
     if ($users_to_delete) {
         static::where('role_id', '=', $role->role_id)->whereIn('user_id', $users_to_delete)->delete();
         $default_role_id = static::getDefaultRoleId();
         if ($default_role_id) {
             $users_with_roles = static::whereIn('user_id', $users_to_delete)->get()->lists('user_id');
             $user_without_roles = array_diff($users_to_delete, $users_with_roles);
             foreach ($user_without_roles as $user_id) {
                 UserRole::create(['role_id' => $default_role_id, 'user_id' => $user_id]);
             }
         }
     }
     $users_to_add = array_diff($role->users->toArray(), $current_users);
     if ($users_to_add) {
         foreach ($users_to_add as $user_id) {
             UserRole::create(['role_id' => $role->role_id, 'user_id' => $user_id]);
         }
     }
 }
Ejemplo n.º 3
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());
 }
Ejemplo n.º 4
0
 public static function updateRole(AclRole $role)
 {
     DB::beginTransaction();
     $dbRole = static::find($role->role_id);
     if (!$dbRole) {
         throw new Exception("Role not found: " . $role->role_id);
     }
     if ($dbRole->name !== $role->name && !$dbRole->default) {
         $dbRole->name = $role->name;
         $dbRole->save();
     }
     RolePermission::updateRolePermissions($role);
     UserRole::updateRoleUsers($role);
     DB::commit();
     return $role->role_id;
 }