From 34573089f4e509340142dd841ecb3623b45f8788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Skowro=C5=84ski?= Date: Thu, 10 Aug 2023 23:49:17 +0200 Subject: [PATCH] Simplify permissions structure --- .../AbstractManagementPermissions.orm.xml | 14 -- .../Permissions/AbstractPermissions.orm.xml | 50 +++++- .../Dlc/DlcManagementPermissions.orm.xml | 9 - .../Mod/ModManagementPermissions.orm.xml | 11 -- .../ModGroupManagementPermissions.orm.xml | 9 - .../ModListManagementPermissions.orm.xml | 12 -- .../User/UserManagementPermissions.orm.xml | 13 -- .../UserGroupManagementPermissions.orm.xml | 9 - config/packages/doctrine.yaml | 48 ------ src/Command/PermissionsMakeAdminCommand.php | 5 +- .../AbstractManagementPermissions.php | 18 -- .../Permissions/AbstractPermissions.php | 162 ++++++++---------- .../Dlc/DlcManagementPermissions.php | 11 -- .../Mod/ModManagementPermissions.php | 22 --- .../ModGroupManagementPermissions.php | 11 -- .../ModList/ModListManagementPermissions.php | 33 ---- .../Permissions/PermissionsInterface.php | 30 ---- .../Traits/CreatePermissionTrait.php | 20 --- .../Traits/DeletePermissionTrait.php | 20 --- .../Traits/ListPermissionTrait.php | 20 --- .../Traits/UpdatePermissionTrait.php | 20 --- .../User/UserManagementPermissions.php | 16 -- .../UserGroupManagementPermissions.php | 11 -- src/Form/Mod/ModFormType.php | 4 +- .../ModListFormDtoDataTransformer.php | 4 +- src/Form/ModList/ModListFormType.php | 6 +- .../Dlc/DlcManagementPermissionsType.php | 44 ----- .../Mod/ModManagementPermissionsType.php | 48 ------ .../ModGroupManagementPermissionsType.php | 44 ----- .../ModListManagementPermissionsType.php | 54 ------ src/Form/Permissions/PermissionsType.php | 152 +++++++++++++--- .../User/UserManagementPermissionsType.php | 62 ------- .../UserGroupManagementPermissionsType.php | 44 ----- src/Form/UserGroup/UserGroupFormType.php | 1 + .../Permissions/PermissionsRepository.php | 9 +- .../UserGroupPermissionsRepository.php | 10 +- .../Permissions/UserPermissionsRepository.php | 10 +- src/Security/Voter/Dlc/CreateDlcVoter.php | 4 +- src/Security/Voter/Dlc/DeleteDlcVoter.php | 4 +- src/Security/Voter/Dlc/ListDlcsVoter.php | 4 +- src/Security/Voter/Dlc/UpdateDlcVoter.php | 4 +- src/Security/Voter/Mod/CreateModVoter.php | 4 +- src/Security/Voter/Mod/DeleteModVoter.php | 4 +- src/Security/Voter/Mod/ListModsVoter.php | 4 +- src/Security/Voter/Mod/UpdateModVoter.php | 4 +- .../Voter/ModGroup/CreateModGroupVoter.php | 4 +- .../Voter/ModGroup/DeleteModGroupVoter.php | 4 +- .../Voter/ModGroup/ListModGroupsVoter.php | 4 +- .../Voter/ModGroup/UpdateModGroupVoter.php | 4 +- .../Voter/ModList/ApproveModListVoter.php | 4 +- .../Voter/ModList/CopyModListVoter.php | 4 +- .../Voter/ModList/CreateModListVoter.php | 4 +- .../Voter/ModList/DeleteModListVoter.php | 4 +- .../Voter/ModList/DownloadModListVoter.php | 7 +- .../Voter/ModList/ListModListsVoter.php | 4 +- .../Voter/ModList/UpdateModListVoter.php | 4 +- src/Security/Voter/User/DeleteUserVoter.php | 4 +- src/Security/Voter/User/ListUsersVoter.php | 4 +- src/Security/Voter/User/UpdateUserVoter.php | 4 +- .../Voter/UserGroup/CreateUserGroupVoter.php | 4 +- .../Voter/UserGroup/DeleteUserGroupVoter.php | 4 +- .../Voter/UserGroup/ListUserGroupsVoter.php | 4 +- .../Voter/UserGroup/UpdateUserGroupVoter.php | 4 +- templates/user/form.html.twig | 66 ++++++- 64 files changed, 391 insertions(+), 848 deletions(-) delete mode 100644 config/doctrine/Permissions/AbstractManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/Dlc/DlcManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/Mod/ModManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/ModGroup/ModGroupManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/ModList/ModListManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/User/UserManagementPermissions.orm.xml delete mode 100644 config/doctrine/Permissions/UserGroup/UserGroupManagementPermissions.orm.xml delete mode 100644 src/Entity/Permissions/AbstractManagementPermissions.php delete mode 100644 src/Entity/Permissions/Dlc/DlcManagementPermissions.php delete mode 100644 src/Entity/Permissions/Mod/ModManagementPermissions.php delete mode 100644 src/Entity/Permissions/ModGroup/ModGroupManagementPermissions.php delete mode 100644 src/Entity/Permissions/ModList/ModListManagementPermissions.php delete mode 100644 src/Entity/Permissions/PermissionsInterface.php delete mode 100644 src/Entity/Permissions/Traits/CreatePermissionTrait.php delete mode 100644 src/Entity/Permissions/Traits/DeletePermissionTrait.php delete mode 100644 src/Entity/Permissions/Traits/ListPermissionTrait.php delete mode 100644 src/Entity/Permissions/Traits/UpdatePermissionTrait.php delete mode 100644 src/Entity/Permissions/User/UserManagementPermissions.php delete mode 100644 src/Entity/Permissions/UserGroup/UserGroupManagementPermissions.php delete mode 100644 src/Form/Permissions/Dlc/DlcManagementPermissionsType.php delete mode 100644 src/Form/Permissions/Mod/ModManagementPermissionsType.php delete mode 100644 src/Form/Permissions/ModGroup/ModGroupManagementPermissionsType.php delete mode 100644 src/Form/Permissions/ModList/ModListManagementPermissionsType.php delete mode 100644 src/Form/Permissions/User/UserManagementPermissionsType.php delete mode 100644 src/Form/Permissions/UserGroup/UserGroupManagementPermissionsType.php diff --git a/config/doctrine/Permissions/AbstractManagementPermissions.orm.xml b/config/doctrine/Permissions/AbstractManagementPermissions.orm.xml deleted file mode 100644 index b079f928..00000000 --- a/config/doctrine/Permissions/AbstractManagementPermissions.orm.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/config/doctrine/Permissions/AbstractPermissions.orm.xml b/config/doctrine/Permissions/AbstractPermissions.orm.xml index 2e78fadb..c689212c 100644 --- a/config/doctrine/Permissions/AbstractPermissions.orm.xml +++ b/config/doctrine/Permissions/AbstractPermissions.orm.xml @@ -4,13 +4,49 @@ xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/doctrine/Permissions/Dlc/DlcManagementPermissions.orm.xml b/config/doctrine/Permissions/Dlc/DlcManagementPermissions.orm.xml deleted file mode 100644 index 06765e95..00000000 --- a/config/doctrine/Permissions/Dlc/DlcManagementPermissions.orm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/config/doctrine/Permissions/Mod/ModManagementPermissions.orm.xml b/config/doctrine/Permissions/Mod/ModManagementPermissions.orm.xml deleted file mode 100644 index 781da83f..00000000 --- a/config/doctrine/Permissions/Mod/ModManagementPermissions.orm.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/config/doctrine/Permissions/ModGroup/ModGroupManagementPermissions.orm.xml b/config/doctrine/Permissions/ModGroup/ModGroupManagementPermissions.orm.xml deleted file mode 100644 index 2fd08705..00000000 --- a/config/doctrine/Permissions/ModGroup/ModGroupManagementPermissions.orm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/config/doctrine/Permissions/ModList/ModListManagementPermissions.orm.xml b/config/doctrine/Permissions/ModList/ModListManagementPermissions.orm.xml deleted file mode 100644 index e84de730..00000000 --- a/config/doctrine/Permissions/ModList/ModListManagementPermissions.orm.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/config/doctrine/Permissions/User/UserManagementPermissions.orm.xml b/config/doctrine/Permissions/User/UserManagementPermissions.orm.xml deleted file mode 100644 index c8101787..00000000 --- a/config/doctrine/Permissions/User/UserManagementPermissions.orm.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/config/doctrine/Permissions/UserGroup/UserGroupManagementPermissions.orm.xml b/config/doctrine/Permissions/UserGroup/UserGroupManagementPermissions.orm.xml deleted file mode 100644 index f3bdde32..00000000 --- a/config/doctrine/Permissions/UserGroup/UserGroupManagementPermissions.orm.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 87b137b7..6949e493 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -66,54 +66,6 @@ doctrine: dir: '%kernel.project_dir%/config/doctrine/Permissions' prefix: 'App\Entity\Permissions' alias: Permissions - UserPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions' - prefix: 'App\Entity\Permissions' - alias: UserPermissions - UserGroupPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions' - prefix: 'App\Entity\Permissions' - alias: UserGroupPermissions - UserManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/User' - prefix: 'App\Entity\Permissions\User' - alias: UserManagementPermissions - UserGroupManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/UserGroup' - prefix: 'App\Entity\Permissions\UserGroup' - alias: UserGroupManagementPermissions - ModManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/Mod' - prefix: 'App\Entity\Permissions\Mod' - alias: ModManagementPermissions - ModGroupManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/ModGroup' - prefix: 'App\Entity\Permissions\ModGroup' - alias: ModGroupManagementPermissions - DlcManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/Dlc' - prefix: 'App\Entity\Permissions\Dlc' - alias: DlcManagementPermissions - ModListManagementPermissions: - is_bundle: false - type: xml - dir: '%kernel.project_dir%/config/doctrine/Permissions/ModList' - prefix: 'App\Entity\Permissions\ModList' - alias: ModListManagementPermissions when@test: doctrine: diff --git a/src/Command/PermissionsMakeAdminCommand.php b/src/Command/PermissionsMakeAdminCommand.php index 44a41fca..196e6efc 100644 --- a/src/Command/PermissionsMakeAdminCommand.php +++ b/src/Command/PermissionsMakeAdminCommand.php @@ -87,9 +87,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int if (false !== $fullPermissions) { $permissions->grantAll(); } else { - $userPermissions = $permissions->getUserManagementPermissions(); - $userPermissions->setList(true); - $userPermissions->setUpdate(true); + $permissions->userList = true; + $permissions->userUpdate = true; } $this->entityManager->flush(); diff --git a/src/Entity/Permissions/AbstractManagementPermissions.php b/src/Entity/Permissions/AbstractManagementPermissions.php deleted file mode 100644 index d6e38d12..00000000 --- a/src/Entity/Permissions/AbstractManagementPermissions.php +++ /dev/null @@ -1,18 +0,0 @@ -userManagementPermissions = new UserManagementPermissions(); - $this->userGroupManagementPermissions = new UserGroupManagementPermissions(); - $this->modManagementPermissions = new ModManagementPermissions(); - $this->modGroupManagementPermissions = new ModGroupManagementPermissions(); - $this->dlcManagementPermissions = new DlcManagementPermissions(); - $this->modListManagementPermissions = new ModListManagementPermissions(); - } - - public function getUserManagementPermissions(): UserManagementPermissions - { - return $this->userManagementPermissions; - } - - public function getUserGroupManagementPermissions(): UserGroupManagementPermissions - { - return $this->userGroupManagementPermissions; - } - - public function getModManagementPermissions(): ModManagementPermissions - { - return $this->modManagementPermissions; - } - - public function getModGroupManagementPermissions(): ModGroupManagementPermissions - { - return $this->modGroupManagementPermissions; - } - - public function getDlcManagementPermissions(): DlcManagementPermissions - { - return $this->dlcManagementPermissions; - } - - public function getModListManagementPermissions(): ModListManagementPermissions - { - return $this->modListManagementPermissions; - } + // User + public bool $userList = false; + public bool $userUpdate = false; + public bool $userDelete = false; + + // User Group + public bool $userGroupList = false; + public bool $userGroupCreate = false; + public bool $userGroupUpdate = false; + public bool $userGroupDelete = false; + + // Mod + public bool $modList = false; + public bool $modCreate = false; + public bool $modUpdate = false; + public bool $modDelete = false; + public bool $modChangeStatus = false; + + // Mod Group + public bool $modGroupList = false; + public bool $modGroupCreate = false; + public bool $modGroupUpdate = false; + public bool $modGroupDelete = false; + + // Dlc + public bool $dlcList = false; + public bool $dlcCreate = false; + public bool $dlcUpdate = false; + public bool $dlcDelete = false; + + // Mod List + public bool $modListList = false; + public bool $modListCreate = false; + public bool $modListUpdate = false; + public bool $modListDelete = false; + public bool $modListCopy = false; + public bool $modListApprove = false; public function grantAll(): void { - $this->getUserManagementPermissions()->setList(true); - $this->getUserManagementPermissions()->setUpdate(true); - $this->getUserManagementPermissions()->setDelete(true); - - $this->getUserGroupManagementPermissions()->setList(true); - $this->getUserGroupManagementPermissions()->setCreate(true); - $this->getUserGroupManagementPermissions()->setUpdate(true); - $this->getUserGroupManagementPermissions()->setDelete(true); - - $this->getModManagementPermissions()->setList(true); - $this->getModManagementPermissions()->setCreate(true); - $this->getModManagementPermissions()->setUpdate(true); - $this->getModManagementPermissions()->setDelete(true); - $this->getModManagementPermissions()->setChangeStatus(true); - - $this->getModGroupManagementPermissions()->setList(true); - $this->getModGroupManagementPermissions()->setCreate(true); - $this->getModGroupManagementPermissions()->setUpdate(true); - $this->getModGroupManagementPermissions()->setDelete(true); - - $this->getDlcManagementPermissions()->setList(true); - $this->getDlcManagementPermissions()->setCreate(true); - $this->getDlcManagementPermissions()->setUpdate(true); - $this->getDlcManagementPermissions()->setDelete(true); - - $this->getModListManagementPermissions()->setList(true); - $this->getModListManagementPermissions()->setCreate(true); - $this->getModListManagementPermissions()->setUpdate(true); - $this->getModListManagementPermissions()->setDelete(true); - $this->getModListManagementPermissions()->setCopy(true); - $this->getModListManagementPermissions()->setApprove(true); + // User + $this->userList = true; + $this->userUpdate = true; + $this->userDelete = true; + + // User Group + $this->userGroupList = true; + $this->userGroupCreate = true; + $this->userGroupUpdate = true; + $this->userGroupDelete = true; + + // Mod + $this->modList = true; + $this->modCreate = true; + $this->modUpdate = true; + $this->modDelete = true; + $this->modChangeStatus = true; + + // Mod Group + $this->modGroupList = true; + $this->modGroupCreate = true; + $this->modGroupUpdate = true; + $this->modGroupDelete = true; + + // Dlc + $this->dlcList = true; + $this->dlcCreate = true; + $this->dlcUpdate = true; + $this->dlcDelete = true; + + // Mod List + $this->modListList = true; + $this->modListCreate = true; + $this->modListUpdate = true; + $this->modListDelete = true; + $this->modListCopy = true; + $this->modListApprove = true; } } diff --git a/src/Entity/Permissions/Dlc/DlcManagementPermissions.php b/src/Entity/Permissions/Dlc/DlcManagementPermissions.php deleted file mode 100644 index 3b671926..00000000 --- a/src/Entity/Permissions/Dlc/DlcManagementPermissions.php +++ /dev/null @@ -1,11 +0,0 @@ -changeStatus; - } - - public function setChangeStatus(bool $changeStatus): void - { - $this->changeStatus = $changeStatus; - } -} diff --git a/src/Entity/Permissions/ModGroup/ModGroupManagementPermissions.php b/src/Entity/Permissions/ModGroup/ModGroupManagementPermissions.php deleted file mode 100644 index 2705df45..00000000 --- a/src/Entity/Permissions/ModGroup/ModGroupManagementPermissions.php +++ /dev/null @@ -1,11 +0,0 @@ -copy; - } - - public function setCopy(bool $copy): void - { - $this->copy = $copy; - } - - public function canApprove(): bool - { - return $this->approve; - } - - public function setApprove(bool $approve): void - { - $this->approve = $approve; - } -} diff --git a/src/Entity/Permissions/PermissionsInterface.php b/src/Entity/Permissions/PermissionsInterface.php deleted file mode 100644 index 9db9da9c..00000000 --- a/src/Entity/Permissions/PermissionsInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -create; - } - - public function setCreate(bool $create): void - { - $this->create = $create; - } -} diff --git a/src/Entity/Permissions/Traits/DeletePermissionTrait.php b/src/Entity/Permissions/Traits/DeletePermissionTrait.php deleted file mode 100644 index ed8835e6..00000000 --- a/src/Entity/Permissions/Traits/DeletePermissionTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -delete; - } - - public function setDelete(bool $delete): void - { - $this->delete = $delete; - } -} diff --git a/src/Entity/Permissions/Traits/ListPermissionTrait.php b/src/Entity/Permissions/Traits/ListPermissionTrait.php deleted file mode 100644 index b382a0c4..00000000 --- a/src/Entity/Permissions/Traits/ListPermissionTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -list; - } - - public function setList(bool $list): void - { - $this->list = $list; - } -} diff --git a/src/Entity/Permissions/Traits/UpdatePermissionTrait.php b/src/Entity/Permissions/Traits/UpdatePermissionTrait.php deleted file mode 100644 index d21f8e0a..00000000 --- a/src/Entity/Permissions/Traits/UpdatePermissionTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -update; - } - - public function setUpdate(bool $update): void - { - $this->update = $update; - } -} diff --git a/src/Entity/Permissions/User/UserManagementPermissions.php b/src/Entity/Permissions/User/UserManagementPermissions.php deleted file mode 100644 index 834bb559..00000000 --- a/src/Entity/Permissions/User/UserManagementPermissions.php +++ /dev/null @@ -1,16 +0,0 @@ -security->getUser(); $canChangeStatus = $currentUser->hasPermissions( - static fn (PermissionsInterface $permissions) => $permissions->getModManagementPermissions()->canChangeStatus() + static fn (AbstractPermissions $permissions) => $permissions->modChangeStatus ); if (!$canChangeStatus) { diff --git a/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php b/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php index 36f6e7f1..5295a16c 100644 --- a/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php +++ b/src/Form/ModList/DataTransformer/ModListFormDtoDataTransformer.php @@ -8,7 +8,7 @@ use App\Entity\Mod\ModInterface; use App\Entity\ModList\ModList; use App\Entity\ModList\ModListInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Form\FormDtoInterface; use App\Form\ModList\Dto\ModListFormDto; @@ -39,7 +39,7 @@ public function transformToEntity(FormDtoInterface $formDto, EntityInterface $en $currentUser = $this->security->getUser(); $canUpdate = $currentUser->hasPermissions( - static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canUpdate() + static fn (AbstractPermissions $permissions) => $permissions->modListUpdate ); // If user has permissions set selected user as owner. Otherwise assign current user. diff --git a/src/Form/ModList/ModListFormType.php b/src/Form/ModList/ModListFormType.php index 2dccdb87..a178a959 100644 --- a/src/Form/ModList/ModListFormType.php +++ b/src/Form/ModList/ModListFormType.php @@ -7,7 +7,7 @@ use App\Entity\Dlc\Dlc; use App\Entity\Mod\AbstractMod; use App\Entity\ModGroup\ModGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\User; use App\Entity\User\UserInterface; use App\Form\ModList\Dto\ModListFormDto; @@ -106,7 +106,7 @@ protected function addOwnerType(FormBuilderInterface $builder): void $currentUser = $this->security->getUser(); $canUpdate = $currentUser->hasPermissions( - static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canUpdate() + static fn (AbstractPermissions $permissions) => $permissions->modListUpdate ); // User cannot change Mod List owner if he doesn't have full update permissions granted @@ -145,7 +145,7 @@ protected function addApprovedType(FormBuilderInterface $builder): void $currentUser = $this->security->getUser(); $canApprove = $currentUser->hasPermissions( - static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canApprove() + static fn (AbstractPermissions $permissions) => $permissions->modListApprove ); if (!$canApprove) { diff --git a/src/Form/Permissions/Dlc/DlcManagementPermissionsType.php b/src/Form/Permissions/Dlc/DlcManagementPermissionsType.php deleted file mode 100644 index 54faca6e..00000000 --- a/src/Form/Permissions/Dlc/DlcManagementPermissionsType.php +++ /dev/null @@ -1,44 +0,0 @@ -add('list', CheckboxType::class, [ - 'label' => 'Can list DLCs', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('create', CheckboxType::class, [ - 'label' => 'Can create DLCs', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit DLCs', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete DLCs', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => DlcManagementPermissions::class, - 'required' => false, - ]); - } -} diff --git a/src/Form/Permissions/Mod/ModManagementPermissionsType.php b/src/Form/Permissions/Mod/ModManagementPermissionsType.php deleted file mode 100644 index b5a33ad3..00000000 --- a/src/Form/Permissions/Mod/ModManagementPermissionsType.php +++ /dev/null @@ -1,48 +0,0 @@ -add('list', CheckboxType::class, [ - 'label' => 'Can list mods', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('create', CheckboxType::class, [ - 'label' => 'Can create mods', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit mods', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete mods', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('changeStatus', CheckboxType::class, [ - 'label' => 'Can change mods status', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => ModManagementPermissions::class, - 'required' => false, - ]); - } -} diff --git a/src/Form/Permissions/ModGroup/ModGroupManagementPermissionsType.php b/src/Form/Permissions/ModGroup/ModGroupManagementPermissionsType.php deleted file mode 100644 index 834317c0..00000000 --- a/src/Form/Permissions/ModGroup/ModGroupManagementPermissionsType.php +++ /dev/null @@ -1,44 +0,0 @@ -add('list', CheckboxType::class, [ - 'label' => 'Can list mod groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('create', CheckboxType::class, [ - 'label' => 'Can create mod groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit mod groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete mod groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => ModGroupManagementPermissions::class, - 'required' => false, - ]); - } -} diff --git a/src/Form/Permissions/ModList/ModListManagementPermissionsType.php b/src/Form/Permissions/ModList/ModListManagementPermissionsType.php deleted file mode 100644 index eb0f68a4..00000000 --- a/src/Form/Permissions/ModList/ModListManagementPermissionsType.php +++ /dev/null @@ -1,54 +0,0 @@ -add('list', CheckboxType::class, [ - 'label' => 'Can list mod lists', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('create', CheckboxType::class, [ - 'label' => 'Can create mod lists', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit other users mod lists', - 'label_attr' => ['class' => 'switch-custom'], - 'help' => 'Note: User can always edit his own or assigned to him mod lists', - ]) - ->add('copy', CheckboxType::class, [ - 'label' => 'Can copy mod lists', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete other users mod lists', - 'label_attr' => ['class' => 'switch-custom'], - 'help' => 'Note: User can always delete his own or assigned to him mod lists', - ]) - ->add('approve', CheckboxType::class, [ - 'label' => 'Can approve mod lists', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => ModListManagementPermissions::class, - 'required' => false, - ]); - } -} diff --git a/src/Form/Permissions/PermissionsType.php b/src/Form/Permissions/PermissionsType.php index a91eb18f..1f6ee1a8 100644 --- a/src/Form/Permissions/PermissionsType.php +++ b/src/Form/Permissions/PermissionsType.php @@ -4,42 +4,148 @@ namespace App\Form\Permissions; -use App\Entity\Permissions\UserPermissions; -use App\Form\Permissions\Dlc\DlcManagementPermissionsType; -use App\Form\Permissions\Mod\ModManagementPermissionsType; -use App\Form\Permissions\ModGroup\ModGroupManagementPermissionsType; -use App\Form\Permissions\ModList\ModListManagementPermissionsType; -use App\Form\Permissions\User\UserManagementPermissionsType; -use App\Form\Permissions\UserGroup\UserGroupManagementPermissionsType; +use App\Entity\Permissions\AbstractPermissions; +use App\Entity\User\User; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\Security\Core\Security; class PermissionsType extends AbstractType { + public function __construct( + private Security $security + ) { + } + public function buildForm(FormBuilderInterface $builder, array $options): void { + /** @var User $currentUser */ + $currentUser = $this->security->getUser(); + + /** @var null|User $target */ $target = $options['target']; $builder - ->add('userManagementPermissions', UserManagementPermissionsType::class, [ - 'label' => 'Users', - 'target' => $target, + // User + ->add('userList', CheckboxType::class, [ + 'label' => 'Can list users', + 'label_attr' => ['class' => 'switch-custom'], + 'disabled' => $currentUser === $target, // User cannot change his own base permissions + ]) + ->add('userUpdate', CheckboxType::class, [ + 'label' => 'Can edit users', + 'label_attr' => ['class' => 'switch-custom'], + 'disabled' => $currentUser === $target, // User cannot change his own base permissions + ]) + ->add('userDelete', CheckboxType::class, [ + 'label' => 'Can delete users', + 'label_attr' => ['class' => 'switch-custom'], + ]) + + // User Group + ->add('userGroupList', CheckboxType::class, [ + 'label' => 'Can list user groups', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('userGroupCreate', CheckboxType::class, [ + 'label' => 'Can create user groups', + 'label_attr' => ['class' => 'switch-custom'], ]) - ->add('userGroupManagementPermissions', UserGroupManagementPermissionsType::class, [ - 'label' => 'User groups', + ->add('userGroupUpdate', CheckboxType::class, [ + 'label' => 'Can edit user groups', + 'label_attr' => ['class' => 'switch-custom'], ]) - ->add('modManagementPermissions', ModManagementPermissionsType::class, [ - 'label' => 'Mods', + ->add('userGroupDelete', CheckboxType::class, [ + 'label' => 'Can delete user groups', + 'label_attr' => ['class' => 'switch-custom'], ]) - ->add('modGroupManagementPermissions', ModGroupManagementPermissionsType::class, [ - 'label' => 'Mod groups', + + // Mod + ->add('modList', CheckboxType::class, [ + 'label' => 'Can list mods', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modCreate', CheckboxType::class, [ + 'label' => 'Can create mods', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modUpdate', CheckboxType::class, [ + 'label' => 'Can edit mods', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modDelete', CheckboxType::class, [ + 'label' => 'Can delete mods', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modChangeStatus', CheckboxType::class, [ + 'label' => 'Can change mods status', + 'label_attr' => ['class' => 'switch-custom'], + ]) + + // Mod Group + ->add('modGroupList', CheckboxType::class, [ + 'label' => 'Can list mod groups', + 'label_attr' => ['class' => 'switch-custom'], ]) - ->add('dlcManagementPermissions', DlcManagementPermissionsType::class, [ - 'label' => 'DLCs', + ->add('modGroupCreate', CheckboxType::class, [ + 'label' => 'Can create mod groups', + 'label_attr' => ['class' => 'switch-custom'], ]) - ->add('modListManagementPermissions', ModListManagementPermissionsType::class, [ - 'label' => 'Mod lists', + ->add('modGroupUpdate', CheckboxType::class, [ + 'label' => 'Can edit mod groups', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modGroupDelete', CheckboxType::class, [ + 'label' => 'Can delete mod groups', + 'label_attr' => ['class' => 'switch-custom'], + ]) + + // Dlc + ->add('dlcList', CheckboxType::class, [ + 'label' => 'Can list DLCs', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('dlcCreate', CheckboxType::class, [ + 'label' => 'Can create DLCs', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('dlcUpdate', CheckboxType::class, [ + 'label' => 'Can edit DLCs', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('dlcDelete', CheckboxType::class, [ + 'label' => 'Can delete DLCs', + 'label_attr' => ['class' => 'switch-custom'], + ]) + + // Mod List + ->add('modListList', CheckboxType::class, [ + 'label' => 'Can list mod lists', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modListCreate', CheckboxType::class, [ + 'label' => 'Can create mod lists', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modListUpdate', CheckboxType::class, [ + 'label' => 'Can edit other users mod lists', + 'label_attr' => ['class' => 'switch-custom'], + 'help' => 'Note: User can always edit his own or assigned to him mod lists', + ]) + ->add('modListCopy', CheckboxType::class, [ + 'label' => 'Can copy mod lists', + 'label_attr' => ['class' => 'switch-custom'], + ]) + ->add('modListDelete', CheckboxType::class, [ + 'label' => 'Can delete other users mod lists', + 'label_attr' => ['class' => 'switch-custom'], + 'help' => 'Note: User can always delete his own or assigned to him mod lists', + ]) + ->add('modListApprove', CheckboxType::class, [ + 'label' => 'Can approve mod lists', + 'label_attr' => ['class' => 'switch-custom'], ]) ; } @@ -48,9 +154,11 @@ public function configureOptions(OptionsResolver $resolver): void { $resolver ->setDefaults([ - 'data_class' => UserPermissions::class, + 'data_class' => AbstractPermissions::class, 'required' => false, - 'target' => null, + ]) + ->setRequired([ + 'target', ]) ; } diff --git a/src/Form/Permissions/User/UserManagementPermissionsType.php b/src/Form/Permissions/User/UserManagementPermissionsType.php deleted file mode 100644 index aa6b6259..00000000 --- a/src/Form/Permissions/User/UserManagementPermissionsType.php +++ /dev/null @@ -1,62 +0,0 @@ -security->getUser(); - - /** @var null|User $target */ - $target = $options['target']; - - $builder - ->add('list', CheckboxType::class, [ - 'label' => 'Can list users', - 'label_attr' => ['class' => 'switch-custom'], - // User cannot change his own base permissions - 'disabled' => $currentUser === $target, - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit users', - 'label_attr' => ['class' => 'switch-custom'], - // User cannot change his own base permissions - 'disabled' => $currentUser === $target, - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete users', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver - ->setDefaults([ - 'data_class' => UserManagementPermissions::class, - 'required' => false, - ]) - ->setRequired([ - 'target', - ]) - ; - } -} diff --git a/src/Form/Permissions/UserGroup/UserGroupManagementPermissionsType.php b/src/Form/Permissions/UserGroup/UserGroupManagementPermissionsType.php deleted file mode 100644 index a4608080..00000000 --- a/src/Form/Permissions/UserGroup/UserGroupManagementPermissionsType.php +++ /dev/null @@ -1,44 +0,0 @@ -add('list', CheckboxType::class, [ - 'label' => 'Can list user groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('create', CheckboxType::class, [ - 'label' => 'Can create user groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('update', CheckboxType::class, [ - 'label' => 'Can edit user groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ->add('delete', CheckboxType::class, [ - 'label' => 'Can delete user groups', - 'label_attr' => ['class' => 'switch-custom'], - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => UserGroupManagementPermissions::class, - 'required' => false, - ]); - } -} diff --git a/src/Form/UserGroup/UserGroupFormType.php b/src/Form/UserGroup/UserGroupFormType.php index 2af024ef..ed3b7aa6 100644 --- a/src/Form/UserGroup/UserGroupFormType.php +++ b/src/Form/UserGroup/UserGroupFormType.php @@ -29,6 +29,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ->add('permissions', PermissionsType::class, [ 'label' => 'User group permissions', 'data_class' => UserGroupPermissions::class, + 'target' => null, ]) ->add('users', EntityType::class, [ 'label' => 'Users', diff --git a/src/Repository/Permissions/PermissionsRepository.php b/src/Repository/Permissions/PermissionsRepository.php index d47891a0..f704f443 100644 --- a/src/Repository/Permissions/PermissionsRepository.php +++ b/src/Repository/Permissions/PermissionsRepository.php @@ -5,15 +5,14 @@ namespace App\Repository\Permissions; use App\Entity\Permissions\AbstractPermissions; -use App\Entity\Permissions\PermissionsInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|PermissionsInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|PermissionsInterface findOneBy(array $criteria, array $orderBy = null) - * @method PermissionsInterface[] findAll() - * @method PermissionsInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|AbstractPermissions find($id, $lockMode = null, $lockVersion = null) + * @method null|AbstractPermissions findOneBy(array $criteria, array $orderBy = null) + * @method AbstractPermissions[] findAll() + * @method AbstractPermissions[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class PermissionsRepository extends ServiceEntityRepository { diff --git a/src/Repository/Permissions/UserGroupPermissionsRepository.php b/src/Repository/Permissions/UserGroupPermissionsRepository.php index 58a4df8d..ea95d7ef 100644 --- a/src/Repository/Permissions/UserGroupPermissionsRepository.php +++ b/src/Repository/Permissions/UserGroupPermissionsRepository.php @@ -4,16 +4,16 @@ namespace App\Repository\Permissions; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\Permissions\UserGroupPermissions; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|PermissionsInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|PermissionsInterface findOneBy(array $criteria, array $orderBy = null) - * @method PermissionsInterface[] findAll() - * @method PermissionsInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|AbstractPermissions find($id, $lockMode = null, $lockVersion = null) + * @method null|AbstractPermissions findOneBy(array $criteria, array $orderBy = null) + * @method AbstractPermissions[] findAll() + * @method AbstractPermissions[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class UserGroupPermissionsRepository extends ServiceEntityRepository { diff --git a/src/Repository/Permissions/UserPermissionsRepository.php b/src/Repository/Permissions/UserPermissionsRepository.php index 826e1557..75dc8764 100644 --- a/src/Repository/Permissions/UserPermissionsRepository.php +++ b/src/Repository/Permissions/UserPermissionsRepository.php @@ -4,16 +4,16 @@ namespace App\Repository\Permissions; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\Permissions\UserPermissions; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** - * @method null|PermissionsInterface find($id, $lockMode = null, $lockVersion = null) - * @method null|PermissionsInterface findOneBy(array $criteria, array $orderBy = null) - * @method PermissionsInterface[] findAll() - * @method PermissionsInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method null|AbstractPermissions find($id, $lockMode = null, $lockVersion = null) + * @method null|AbstractPermissions findOneBy(array $criteria, array $orderBy = null) + * @method AbstractPermissions[] findAll() + * @method AbstractPermissions[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class UserPermissionsRepository extends ServiceEntityRepository { diff --git a/src/Security/Voter/Dlc/CreateDlcVoter.php b/src/Security/Voter/Dlc/CreateDlcVoter.php index 5429a97b..80e68f94 100644 --- a/src/Security/Voter/Dlc/CreateDlcVoter.php +++ b/src/Security/Voter/Dlc/CreateDlcVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\Dlc; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getDlcManagementPermissions()->canCreate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->dlcCreate); } } diff --git a/src/Security/Voter/Dlc/DeleteDlcVoter.php b/src/Security/Voter/Dlc/DeleteDlcVoter.php index 2ee647e1..8353bf90 100644 --- a/src/Security/Voter/Dlc/DeleteDlcVoter.php +++ b/src/Security/Voter/Dlc/DeleteDlcVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Dlc; use App\Entity\Dlc\DlcInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getDlcManagementPermissions()->canDelete()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->dlcDelete); } } diff --git a/src/Security/Voter/Dlc/ListDlcsVoter.php b/src/Security/Voter/Dlc/ListDlcsVoter.php index 0c9db583..5d340632 100644 --- a/src/Security/Voter/Dlc/ListDlcsVoter.php +++ b/src/Security/Voter/Dlc/ListDlcsVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\Dlc; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getDlcManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->dlcList); } } diff --git a/src/Security/Voter/Dlc/UpdateDlcVoter.php b/src/Security/Voter/Dlc/UpdateDlcVoter.php index d8cbb107..31d34295 100644 --- a/src/Security/Voter/Dlc/UpdateDlcVoter.php +++ b/src/Security/Voter/Dlc/UpdateDlcVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Dlc; use App\Entity\Dlc\DlcInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getDlcManagementPermissions()->canUpdate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->dlcUpdate); } } diff --git a/src/Security/Voter/Mod/CreateModVoter.php b/src/Security/Voter/Mod/CreateModVoter.php index 6a3cd5dd..b0abd1ba 100644 --- a/src/Security/Voter/Mod/CreateModVoter.php +++ b/src/Security/Voter/Mod/CreateModVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\Mod; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModManagementPermissions()->canCreate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modCreate); } } diff --git a/src/Security/Voter/Mod/DeleteModVoter.php b/src/Security/Voter/Mod/DeleteModVoter.php index 3f2b7a10..2bb70f03 100644 --- a/src/Security/Voter/Mod/DeleteModVoter.php +++ b/src/Security/Voter/Mod/DeleteModVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Mod; use App\Entity\Mod\ModInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModManagementPermissions()->canDelete()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modDelete); } } diff --git a/src/Security/Voter/Mod/ListModsVoter.php b/src/Security/Voter/Mod/ListModsVoter.php index 4f7ec87f..28928b0f 100644 --- a/src/Security/Voter/Mod/ListModsVoter.php +++ b/src/Security/Voter/Mod/ListModsVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\Mod; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modList); } } diff --git a/src/Security/Voter/Mod/UpdateModVoter.php b/src/Security/Voter/Mod/UpdateModVoter.php index c64a758d..789d29c7 100644 --- a/src/Security/Voter/Mod/UpdateModVoter.php +++ b/src/Security/Voter/Mod/UpdateModVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\Mod; use App\Entity\Mod\ModInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModManagementPermissions()->canUpdate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modUpdate); } } diff --git a/src/Security/Voter/ModGroup/CreateModGroupVoter.php b/src/Security/Voter/ModGroup/CreateModGroupVoter.php index 2371672b..2229d04a 100644 --- a/src/Security/Voter/ModGroup/CreateModGroupVoter.php +++ b/src/Security/Voter/ModGroup/CreateModGroupVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\ModGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModGroupManagementPermissions()->canCreate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modGroupCreate); } } diff --git a/src/Security/Voter/ModGroup/DeleteModGroupVoter.php b/src/Security/Voter/ModGroup/DeleteModGroupVoter.php index 7ba83411..55c4b7d1 100644 --- a/src/Security/Voter/ModGroup/DeleteModGroupVoter.php +++ b/src/Security/Voter/ModGroup/DeleteModGroupVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModGroup; use App\Entity\ModGroup\ModGroupInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModGroupManagementPermissions()->canDelete()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modGroupDelete); } } diff --git a/src/Security/Voter/ModGroup/ListModGroupsVoter.php b/src/Security/Voter/ModGroup/ListModGroupsVoter.php index 7a6c84b2..6d097e0a 100644 --- a/src/Security/Voter/ModGroup/ListModGroupsVoter.php +++ b/src/Security/Voter/ModGroup/ListModGroupsVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\ModGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModGroupManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modGroupList); } } diff --git a/src/Security/Voter/ModGroup/UpdateModGroupVoter.php b/src/Security/Voter/ModGroup/UpdateModGroupVoter.php index 4a886fba..8f16395c 100644 --- a/src/Security/Voter/ModGroup/UpdateModGroupVoter.php +++ b/src/Security/Voter/ModGroup/UpdateModGroupVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModGroup; use App\Entity\ModGroup\ModGroupInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModGroupManagementPermissions()->canUpdate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modGroupUpdate); } } diff --git a/src/Security/Voter/ModList/ApproveModListVoter.php b/src/Security/Voter/ModList/ApproveModListVoter.php index 49cb4009..56b5b313 100644 --- a/src/Security/Voter/ModList/ApproveModListVoter.php +++ b/src/Security/Voter/ModList/ApproveModListVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\ModList; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canApprove()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListApprove); } } diff --git a/src/Security/Voter/ModList/CopyModListVoter.php b/src/Security/Voter/ModList/CopyModListVoter.php index 90527907..1eca7a11 100644 --- a/src/Security/Voter/ModList/CopyModListVoter.php +++ b/src/Security/Voter/ModList/CopyModListVoter.php @@ -5,7 +5,7 @@ namespace App\Security\Voter\ModList; use App\Entity\ModList\ModListInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canCopy()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListCopy); } } diff --git a/src/Security/Voter/ModList/CreateModListVoter.php b/src/Security/Voter/ModList/CreateModListVoter.php index 72f61a77..a685695f 100644 --- a/src/Security/Voter/ModList/CreateModListVoter.php +++ b/src/Security/Voter/ModList/CreateModListVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\ModList; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canCreate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListCreate); } } diff --git a/src/Security/Voter/ModList/DeleteModListVoter.php b/src/Security/Voter/ModList/DeleteModListVoter.php index 0289ac8f..6f6996d0 100644 --- a/src/Security/Voter/ModList/DeleteModListVoter.php +++ b/src/Security/Voter/ModList/DeleteModListVoter.php @@ -6,7 +6,7 @@ use App\Entity\ModList\ModList; use App\Entity\ModList\ModListInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -31,7 +31,7 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ $modList = $subject; return $modList->getOwner() === $currentUser - || $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canDelete()) + || $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListDelete) ; } } diff --git a/src/Security/Voter/ModList/DownloadModListVoter.php b/src/Security/Voter/ModList/DownloadModListVoter.php index b07ec1b8..e1b962a9 100644 --- a/src/Security/Voter/ModList/DownloadModListVoter.php +++ b/src/Security/Voter/ModList/DownloadModListVoter.php @@ -6,7 +6,8 @@ use App\Entity\ModList\ModList; use App\Entity\ModList\ModListInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; +use App\Entity\User\User; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -33,8 +34,8 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ } // Otherwise user needs to be logged-in and have "List" permission granted - return $currentUser instanceof UserInterface - && $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canList()) + return $currentUser instanceof User + && $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListList) ; } } diff --git a/src/Security/Voter/ModList/ListModListsVoter.php b/src/Security/Voter/ModList/ListModListsVoter.php index d8714f98..5bcb35f5 100644 --- a/src/Security/Voter/ModList/ListModListsVoter.php +++ b/src/Security/Voter/ModList/ListModListsVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\ModList; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListList); } } diff --git a/src/Security/Voter/ModList/UpdateModListVoter.php b/src/Security/Voter/ModList/UpdateModListVoter.php index 24d5199e..e382b2a8 100644 --- a/src/Security/Voter/ModList/UpdateModListVoter.php +++ b/src/Security/Voter/ModList/UpdateModListVoter.php @@ -6,7 +6,7 @@ use App\Entity\ModList\ModList; use App\Entity\ModList\ModListInterface; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -31,7 +31,7 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ $modList = $subject; return $modList->getOwner() === $currentUser - || $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getModListManagementPermissions()->canUpdate()) + || $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->modListUpdate) ; } } diff --git a/src/Security/Voter/User/DeleteUserVoter.php b/src/Security/Voter/User/DeleteUserVoter.php index eff477be..0c08a6bf 100644 --- a/src/Security/Voter/User/DeleteUserVoter.php +++ b/src/Security/Voter/User/DeleteUserVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\User; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -29,7 +29,7 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ $user = $subject; return $currentUser !== $user - && $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserManagementPermissions()->canDelete()) + && $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userDelete) ; } } diff --git a/src/Security/Voter/User/ListUsersVoter.php b/src/Security/Voter/User/ListUsersVoter.php index 33a857cd..254d83c0 100644 --- a/src/Security/Voter/User/ListUsersVoter.php +++ b/src/Security/Voter/User/ListUsersVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\User; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userList); } } diff --git a/src/Security/Voter/User/UpdateUserVoter.php b/src/Security/Voter/User/UpdateUserVoter.php index e4018138..0e95a942 100644 --- a/src/Security/Voter/User/UpdateUserVoter.php +++ b/src/Security/Voter/User/UpdateUserVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\User; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserManagementPermissions()->canUpdate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userUpdate); } } diff --git a/src/Security/Voter/UserGroup/CreateUserGroupVoter.php b/src/Security/Voter/UserGroup/CreateUserGroupVoter.php index bbdb4726..24b96383 100644 --- a/src/Security/Voter/UserGroup/CreateUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/CreateUserGroupVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\UserGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserGroupManagementPermissions()->canCreate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userGroupCreate); } } diff --git a/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php b/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php index df6d1e89..4435e75c 100644 --- a/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/DeleteUserGroupVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\UserGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Entity\UserGroup\UserGroupInterface; use App\Security\Enum\PermissionsEnum; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserGroupManagementPermissions()->canDelete()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userGroupDelete); } } diff --git a/src/Security/Voter/UserGroup/ListUserGroupsVoter.php b/src/Security/Voter/UserGroup/ListUserGroupsVoter.php index 553168fd..9696b935 100644 --- a/src/Security/Voter/UserGroup/ListUserGroupsVoter.php +++ b/src/Security/Voter/UserGroup/ListUserGroupsVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\UserGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Security\Enum\PermissionsEnum; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -25,6 +25,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserGroupManagementPermissions()->canList()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userGroupList); } } diff --git a/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php b/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php index bc601044..514d01cf 100644 --- a/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php +++ b/src/Security/Voter/UserGroup/UpdateUserGroupVoter.php @@ -4,7 +4,7 @@ namespace App\Security\Voter\UserGroup; -use App\Entity\Permissions\PermissionsInterface; +use App\Entity\Permissions\AbstractPermissions; use App\Entity\User\UserInterface; use App\Entity\UserGroup\UserGroupInterface; use App\Security\Enum\PermissionsEnum; @@ -26,6 +26,6 @@ protected function voteOnAttribute(string $attribute, $subject, TokenInterface $ return false; } - return $currentUser->hasPermissions(static fn (PermissionsInterface $permissions) => $permissions->getUserGroupManagementPermissions()->canUpdate()); + return $currentUser->hasPermissions(static fn (AbstractPermissions $permissions) => $permissions->userGroupUpdate); } } diff --git a/templates/user/form.html.twig b/templates/user/form.html.twig index 56fbf13b..1dab41e6 100644 --- a/templates/user/form.html.twig +++ b/templates/user/form.html.twig @@ -11,7 +11,71 @@ {% endembed %} {{ form_start(form) }} - {{ form_widget(form) }} + {{ form_errors(form) }} + + {{ form_row(form.steamId) }} + +
+ {{ 'User permissions'|trans }} + +
+ {{ 'Users'|trans }} + + {{ form_row(form.permissions.userList) }} + {{ form_row(form.permissions.userUpdate) }} + {{ form_row(form.permissions.userDelete) }} +
+ +
+ {{ 'User groups'|trans }} + + {{ form_row(form.permissions.userGroupList) }} + {{ form_row(form.permissions.userGroupCreate) }} + {{ form_row(form.permissions.userGroupUpdate) }} + {{ form_row(form.permissions.userGroupDelete) }} +
+ +
+ {{ 'Mods'|trans }} + + {{ form_row(form.permissions.modList) }} + {{ form_row(form.permissions.modCreate) }} + {{ form_row(form.permissions.modUpdate) }} + {{ form_row(form.permissions.modDelete) }} + {{ form_row(form.permissions.modChangeStatus) }} +
+ +
+ {{ 'Mod groups'|trans }} + + {{ form_row(form.permissions.modGroupList) }} + {{ form_row(form.permissions.modGroupCreate) }} + {{ form_row(form.permissions.modGroupUpdate) }} + {{ form_row(form.permissions.modGroupDelete) }} +
+ +
+ {{ 'DLCs'|trans }} + + {{ form_row(form.permissions.dlcList) }} + {{ form_row(form.permissions.dlcCreate) }} + {{ form_row(form.permissions.dlcUpdate) }} + {{ form_row(form.permissions.dlcDelete) }} +
+ +
+ {{ 'Mod lists'|trans }} + + {{ form_row(form.permissions.modListList) }} + {{ form_row(form.permissions.modListCreate) }} + {{ form_row(form.permissions.modListUpdate) }} + {{ form_row(form.permissions.modListCopy) }} + {{ form_row(form.permissions.modListDelete) }} + {{ form_row(form.permissions.modListApprove) }} +
+
+ + {{- form_rest(form) -}}