added role cards to permission screen (#4401)

* simplify creating new roles by auto-replacing input
This commit is contained in:
Kevin Papst
2023-11-04 20:17:05 +01:00
committed by GitHub
parent 0b1625175b
commit a1d9874c13
7 changed files with 98 additions and 90 deletions

View File

@@ -16,6 +16,7 @@ use App\Event\PermissionSectionsEvent;
use App\Event\PermissionsEvent;
use App\Form\RoleType;
use App\Model\PermissionSection;
use App\Repository\Query\UserQuery;
use App\Repository\RoleRepository;
use App\Repository\UserRepository;
use App\Security\RolePermissionManager;
@@ -46,7 +47,7 @@ final class PermissionController extends AbstractController
#[Route(path: '', name: 'admin_user_permissions', methods: ['GET', 'POST'])]
#[IsGranted('role_permissions')]
public function permissions(EventDispatcherInterface $dispatcher, CsrfTokenManagerInterface $csrfTokenManager, RoleService $roleService): Response
public function permissions(EventDispatcherInterface $dispatcher, CsrfTokenManagerInterface $csrfTokenManager, RoleService $roleService, UserRepository $userRepository): Response
{
$all = $this->roleRepository->findAll();
$existing = [];
@@ -151,7 +152,10 @@ final class PermissionController extends AbstractController
$page->setHelp('permissions.html');
$page->setActionName('user_permissions');
$users = $userRepository->getUsersForQuery(new UserQuery());
return $this->render('permission/permissions.html.twig', [
'users' => $users,
'page_setup' => $page,
'token' => $csrfTokenManager->refreshToken(self::TOKEN_NAME)->getValue(),
'roles' => array_values($roles),

View File

@@ -46,4 +46,9 @@ class Role
return $this;
}
public function isUser(): bool
{
return $this->name === User::ROLE_USER;
}
}

View File

@@ -34,22 +34,43 @@ final class RoleType extends AbstractType
]
]);
$replacer = function ($roleName): ?string {
if ($roleName === null) {
return null;
}
if (\is_string($roleName)) {
$roleName = preg_replace('/[^a-zA-Z_]/', '_', $roleName);
$roleName = preg_replace('/_+/', '_', $roleName ?? '');
$roleName = ltrim($roleName ?? '', '_');
$roleName = rtrim($roleName, '_');
$roleName = strtoupper($roleName);
}
return $roleName;
};
// help the user to figure out the allowed name
$builder->get('name')->addViewTransformer(
new CallbackTransformer(
function ($roleName) {
if (\is_string($roleName)) {
$roleName = str_replace(' ', '_', $roleName);
$roleName = str_replace('-', '_', $roleName);
}
return $roleName;
function ($roleName) use ($replacer) {
return $replacer($roleName);
},
function ($roleName) {
return $roleName;
}
)
);
$builder->get('name')->addModelTransformer(
new CallbackTransformer(
function ($roleName) {
return $roleName;
},
function ($roleName) use ($replacer) {
return $replacer($roleName);
}
)
);
}
public function configureOptions(OptionsResolver $resolver): void