Prevent rootAdmins from having other roles & being deleted via the API (#1699)

This commit is contained in:
MartinOscar 2025-09-11 12:56:21 +02:00 committed by GitHub
parent 61dcb9a3ba
commit 8f1ec20e96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 14 deletions

View File

@ -102,12 +102,15 @@ class UserController extends ApplicationApiController
*/
public function assignRoles(AssignUserRolesRequest $request, User $user): array
{
foreach ($request->input('roles') as $role) {
if ($role === Role::getRootAdmin()->id) {
continue;
}
if (!$user->isRootAdmin()) {
$rootAdminId = Role::getRootAdmin()->id;
foreach ($request->input('roles') as $role) {
if ($role === $rootAdminId) {
continue;
}
$user->assignRole($role);
$user->assignRole($role);
}
}
$response = $this->fractal->item($user)
@ -125,12 +128,15 @@ class UserController extends ApplicationApiController
*/
public function removeRoles(AssignUserRolesRequest $request, User $user): array
{
foreach ($request->input('roles') as $role) {
if ($role === Role::getRootAdmin()->id) {
continue;
}
if (!$user->isRootAdmin()) {
$rootAdminId = Role::getRootAdmin()->id;
foreach ($request->input('roles') as $role) {
if ($role === $rootAdminId) {
continue;
}
$user->removeRole($role);
$user->removeRole($role);
}
}
$response = $this->fractal->item($user)
@ -169,8 +175,12 @@ class UserController extends ApplicationApiController
*/
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);
}
}

View File

@ -8,8 +8,8 @@ class AssignUserRolesRequest extends StoreUserRequest
public function rules(?array $rules = null): array
{
return [
'roles' => 'array',
'roles.*' => 'int',
'roles' => 'required|array',
'roles.*' => 'integer|exists:roles,id',
];
}
}