mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 04:46:52 +01:00 
			
		
		
		
	Prevent rootAdmins from having other roles & being deleted via the API (#1699)
This commit is contained in:
		
							parent
							
								
									61dcb9a3ba
								
							
						
					
					
						commit
						8f1ec20e96
					
				@ -102,12 +102,15 @@ class UserController extends ApplicationApiController
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function assignRoles(AssignUserRolesRequest $request, User $user): array
 | 
					    public function assignRoles(AssignUserRolesRequest $request, User $user): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        foreach ($request->input('roles') as $role) {
 | 
					        if (!$user->isRootAdmin()) {
 | 
				
			||||||
            if ($role === Role::getRootAdmin()->id) {
 | 
					            $rootAdminId = Role::getRootAdmin()->id;
 | 
				
			||||||
                continue;
 | 
					            foreach ($request->input('roles') as $role) {
 | 
				
			||||||
            }
 | 
					                if ($role === $rootAdminId) {
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $user->assignRole($role);
 | 
					                $user->assignRole($role);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $response = $this->fractal->item($user)
 | 
					        $response = $this->fractal->item($user)
 | 
				
			||||||
@ -125,12 +128,15 @@ class UserController extends ApplicationApiController
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function removeRoles(AssignUserRolesRequest $request, User $user): array
 | 
					    public function removeRoles(AssignUserRolesRequest $request, User $user): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        foreach ($request->input('roles') as $role) {
 | 
					        if (!$user->isRootAdmin()) {
 | 
				
			||||||
            if ($role === Role::getRootAdmin()->id) {
 | 
					            $rootAdminId = Role::getRootAdmin()->id;
 | 
				
			||||||
                continue;
 | 
					            foreach ($request->input('roles') as $role) {
 | 
				
			||||||
            }
 | 
					                if ($role === $rootAdminId) {
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $user->removeRole($role);
 | 
					                $user->removeRole($role);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $response = $this->fractal->item($user)
 | 
					        $response = $this->fractal->item($user)
 | 
				
			||||||
@ -169,8 +175,12 @@ class UserController extends ApplicationApiController
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function delete(DeleteUserRequest $request, User $user): JsonResponse
 | 
					    public function delete(DeleteUserRequest $request, User $user): JsonResponse
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $user->delete();
 | 
					        if (!$user->isRootAdmin()) {
 | 
				
			||||||
 | 
					            $user->delete();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
 | 
					            return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new JsonResponse([], JsonResponse::HTTP_FORBIDDEN);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -8,8 +8,8 @@ class AssignUserRolesRequest extends StoreUserRequest
 | 
				
			|||||||
    public function rules(?array $rules = null): array
 | 
					    public function rules(?array $rules = null): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
            'roles' => 'array',
 | 
					            'roles' => 'required|array',
 | 
				
			||||||
            'roles.*' => 'int',
 | 
					            'roles.*' => 'integer|exists:roles,id',
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user