From 23bd345226b6dd0be5deb62233b0167fba7b44e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nu=C5=A1a=20Puk=C5=A1i=C4=8D?= Date: Tue, 10 Dec 2024 16:29:10 +0100 Subject: [PATCH] Roles --- .../Administration/RoleController.php | 67 +++++++++++++++++++ src/Form/RoleType.php | 33 +++++++++ templates/admin/roles.html.twig | 17 +++++ translations/messages.en.yaml | 2 + 4 files changed, 119 insertions(+) create mode 100644 src/Controller/Administration/RoleController.php create mode 100644 src/Form/RoleType.php create mode 100644 templates/admin/roles.html.twig diff --git a/src/Controller/Administration/RoleController.php b/src/Controller/Administration/RoleController.php new file mode 100644 index 0000000..d6d3840 --- /dev/null +++ b/src/Controller/Administration/RoleController.php @@ -0,0 +1,67 @@ +createForm(RoleType::class); + + return $this->render('admin/roles.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * Add a role to current user as submitted in a form + */ + #[Route('/admin/role/add', name: 'admin_roles_add')] + public function addRole(Request $request, UserEntityRepository $userRepository, EntityManagerInterface $em, TokenStorageInterface $tokenStorage): Response + { + // get role from request and add to current user's roles and save to db + $npub = $this->getUser()->getUserIdentifier(); + + $form = $this->createForm(RoleType::class); + $form->handleRequest($request); + + if (!$form->isSubmitted() || !$form->isValid()) { + return $this->render('admin/roles.html.twig', [ + 'form' => $form->createView(), + ]); + } + + $role = $form->get('role')->getData(); + $user = $userRepository->findOneBy(['npub' => $npub]); + $user->addRole($role); + $em->persist($user); + $em->flush(); + + // regenerate token with new roles + // Refresh the user token after update + $token = $tokenStorage->getToken(); + if ($token) { + $token->setUser($user); + $tokenStorage->setToken($token); + } + + // add a flash message + $this->addFlash('success', 'Role added to user'); + + return $this->render('admin/roles.html.twig', [ + 'form' => $form->createView(), + ]); + } +} diff --git a/src/Form/RoleType.php b/src/Form/RoleType.php new file mode 100644 index 0000000..e8ff869 --- /dev/null +++ b/src/Form/RoleType.php @@ -0,0 +1,33 @@ +setAction('/admin/role/add') + ->add('role', TextType::class, [ + 'required' => true, + ]) + ->add('submit', SubmitType::class, [ + 'label' => 'Add Role', + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver) + { + } +} diff --git a/templates/admin/roles.html.twig b/templates/admin/roles.html.twig new file mode 100644 index 0000000..a3cd83d --- /dev/null +++ b/templates/admin/roles.html.twig @@ -0,0 +1,17 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

{{ 'heading.roles'|trans }}

+ + {# Flash messages for feedback #} + {% for message in app.flashes('success') %} +
+ {{ message }} +
+ {% endfor %} + + {# Form for adding a new role #} + {{ form_start(form) }} + {{ form_widget(form) }} + +{% endblock %} diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 4574c77..3b016ea 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -1,2 +1,4 @@ text: byline: 'By' +heading: + roles: 'Roles'