feat: list administrative users for admins

This commit is contained in:
Björn Fromme
2024-04-19 15:58:58 +02:00
parent 4372cdaaeb
commit 7257b72159
5 changed files with 151 additions and 0 deletions
@@ -0,0 +1,26 @@
<?php
namespace App\Controller\Admin\System\User;
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class IndexController extends AbstractController
{
public function __construct(private readonly UserRepository $userRepository)
{}
#[Route('/admin/system/user', name: 'app_admin_system_user_index')]
#[IsGranted('ROLE_ADMIN')]
public function index(): Response
{
$users = $this->userRepository->getAdministrativeUsers();
return $this->render('admin/system/user/index.html.twig', [
'users' => $users,
]);
}
}
+21
View File
@@ -147,9 +147,30 @@ class User implements UserInterface, TimestampableEntityInterface
{
$roles = ['ROLE_USER', ...$this->roles];
if (true === $this->isSuperAdmin()) {
$roles[] = 'ROLE_SUPER_ADMIN';
}
return array_unique($roles);
}
public function getRolesLabels(): array
{
$labels = [];
foreach ($this->roles as $role) {
$labels[] = match($role) {
'ROLE_ADMIN' => 'Admin',
'ROLE_MANAGER' => 'Reisemanager',
'ROLE_HOUSE_MANAGER' => 'Hausleitung',
'ROLE_TEAMER' => 'Teamer',
default => $role,
};
}
return $labels;
}
public function setRoles(array $roles): static
{
$this->roles = $roles;
+6
View File
@@ -170,6 +170,12 @@ class AdminMenuBuilder extends AbstractMenuBuilder
],
],
]);
$settingsMenu->addChild('Administrative Benutzer', [
'route' => 'app_admin_system_user_index',
'linkAttributes' => [
'title' => 'Administrative Benutzer',
],
]);
$menu->addChild('Logs', [
'route' => 'app_admin_log_index',
+21
View File
@@ -21,6 +21,27 @@ class UserRepository extends ServiceEntityRepository
parent::__construct($registry, User::class);
}
public function getAdministrativeUsers(): array
{
$qb = $this->createQueryBuilder('u');
return $qb
->where($qb->expr()->orX(
$qb->expr()->like('u.roles', ':role_admin'),
$qb->expr()->like('u.roles', ':role_manager'),
$qb->expr()->like('u.roles', ':role_house_manager')
))
->orderBy('u.lastName', 'ASC')
->setParameters([
'role_admin' => '%"ROLE_ADMIN"%',
'role_manager' => '%"ROLE_MANAGER"%',
'role_house_manager' => '%"ROLE_HOUSE_MANAGER"%',
])
->getQuery()
->getResult()
;
}
public function getUsersByRoleAndHotelCode(string $role, string $hotelCode): array
{
$hotelCodeBase = substr($hotelCode, 0, 3);