diff --git a/.env.test b/.env.test
deleted file mode 100644
index 9e7162f..0000000
--- a/.env.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# define your env variables for the test env here
-KERNEL_CLASS='App\Kernel'
-APP_SECRET='$ecretf0rt3st'
-SYMFONY_DEPRECATIONS_HELPER=999999
-PANTHER_APP_ENV=panther
-PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
new file mode 100644
index 0000000..09141c6
--- /dev/null
+++ b/.phpunit.cache/test-results
@@ -0,0 +1 @@
+{"version":2,"defects":{"App\\Tests\\Service\\UserServiceTest::testCreateNewUserSuccess":7,"App\\Tests\\Service\\UserServiceTest::testLinkUserToOrganization":7,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testDeactivateHandlesException":8,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testSyncRolesHandlesSuperAdminLogic":8,"App\\Tests\\Service\\CguUserServiceTest::testAcceptLatestCguCreatesNewRelation":7,"App\\Tests\\Service\\CguUserServiceTest::testIsLatestCguAcceptedReturnsFalseIfNoCguExists":7,"App\\Tests\\Service\\AwsServiceTest::testGenerateUUIDv4":1,"App\\Tests\\Service\\AwsServiceTest::testCreateBucketSuccess":8,"App\\Tests\\Service\\AwsServiceTest::testCreateBucketFailure":8,"App\\Tests\\Service\\AwsServiceTest::testDeleteBucket":8,"App\\Tests\\Service\\AwsServiceTest::testGetListObjectReturnsContents":8,"App\\Tests\\Service\\AwsServiceTest::testGetListObjectReturnsNullIfEmpty":8,"App\\Tests\\Service\\AwsServiceTest::testPutDocObj":8,"App\\Tests\\Service\\AwsServiceTest::testDeleteDocObj":8,"App\\Tests\\Service\\AwsServiceTest::testRenameDocObj":8,"App\\Tests\\Service\\AwsServiceTest::testMoveDocObj":8,"App\\Tests\\Service\\AwsServiceTest::testGetPublicUrl":8,"App\\Tests\\Service\\ActionServiceTest::testFormatActivities":8,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_ajax_returns_json_response":8,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_returns_404_for_invalid_organization":8,"App\\Tests\\Controller\\UserControllerTest::view_user_displays_details_with_full_context":7,"App\\Tests\\Controller\\UserControllerTest::active_status_deactivates_user_via_ajax":7,"App\\Tests\\Controller\\UserControllerTest::data_returns_json_list_of_users":7,"App\\Tests\\Controller\\UserControllerTest::delete_soft_deletes_user":7,"App\\Tests\\Controller\\UserControllerTest::new_user_creation_redirects_correctly":7,"App\\Tests\\Controller\\ApplicationControllerTest::index_redirects_unauthenticated_user":7,"App\\Tests\\Controller\\ApplicationControllerTest::index_lists_applications_for_authenticated_user":8,"App\\Tests\\Controller\\ApplicationControllerTest::edit_page_denies_access_to_regular_users":8,"App\\Tests\\Controller\\ApplicationControllerTest::edit_page_loads_for_super_admin":7,"App\\Tests\\Controller\\ApplicationControllerTest::edit_submits_changes_successfully":7,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_non_existent_id":7,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_adds_organization_successfully":7,"App\\Tests\\Controller\\ApplicationControllerTest::edit_fails_gracefully_on_exception_with_mocked_logger":7,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_form_submission_with_missing_data":7,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_denies_access_to_admins":7,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_fails_on_invalid_organization":7,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_fails_on_invalid_application":7,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_denies_access_to_user":7,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_removes_organization_successfully":7,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_super_admin":7,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_single_app":7,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_mutiple_org":7,"App\\Tests\\Controller\\NotificationControllerTest::test_markAsRead_unauthenticated_user_forbidden":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_index_super_admin_success":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_index_regular_user_forbidden":8,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_super_admin_success":7,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_single_org":7,"App\\Tests\\Controller\\NotificationControllerTest::test_unread_unauthenticated_user_forbidden":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_super_admin_invalid_data":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_super_admin_success":8,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_super_admin_invalid_data":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_nonexistent_organization_not_found":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_super_admin_success":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_regular_user_forbidden":8,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_nonexistent_organization_not_found":7,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_organization_with_dependencies":8,"App\\Tests\\Controller\\SecurityControllerTest::test_login_page_contains_login_form":7,"App\\Tests\\Controller\\SecurityControllerTest::test_login_with_invalid_credentials_shows_error":7,"App\\Tests\\Controller\\SecurityControllerTest::test_login_with_valid_credentials_redirects":7,"App\\Tests\\Controller\\SecurityControllerTest::test_logout_redirects_to_login":7,"App\\Tests\\Controller\\UserControllerTest::test_index_super_admin_success":7,"App\\Tests\\Controller\\UserControllerTest::test_index_no_organizations":7,"App\\Tests\\Controller\\UserControllerTest::test_view_super_admin":7,"App\\Tests\\Controller\\UserControllerTest::test_index_no_users_found":7,"App\\Tests\\Controller\\UserControllerTest::test_view_regular_user_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_view_admin":7,"App\\Tests\\Controller\\UserControllerTest::test_view_user_not_found":7,"App\\Tests\\Controller\\UserControllerTest::test_edit_regular_user_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_edit_other_user_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_edit_user_not_found":7,"App\\Tests\\Controller\\UserControllerTest::test_edit_admin_edit_other_user_success":7,"App\\Tests\\Controller\\UserControllerTest::test_edit_admin_edit_other_user_different_organization_forbidden":8,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_success":7,"App\\Tests\\Controller\\UserControllerTest::test_create_admin_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_invalid_data":7,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_valid":8,"App\\Tests\\Controller\\UserControllerTest::test_delete_super_admin_success":7,"App\\Tests\\Controller\\UserControllerTest::test_delete_admin_forbidden":7,"App\\Tests\\Controller\\UserControllerTest::test_deactivate_super_admin_success":7,"App\\Tests\\Controller\\UserControllerTest::test_tabulator_super_admin_success":7},"times":{"App\\Tests\\Service\\UserServiceTest::testGenerateRandomPassword":0.001,"App\\Tests\\Service\\UserServiceTest::testIsUserConnectedReturnsTrueIfTokenValid":0.001,"App\\Tests\\Service\\UserServiceTest::testIsUserConnectedReturnsFalseIfTokenExpired":0.001,"App\\Tests\\Service\\UserServiceTest::testGetUserByIdentifierFound":0.001,"App\\Tests\\Service\\UserServiceTest::testGetUserByIdentifierNotFound":0.002,"App\\Tests\\Service\\UserServiceTest::testHasAccessToReturnsTrueForSuperAdmin":0.001,"App\\Tests\\Service\\UserServiceTest::testHasAccessToReturnsTrueForSelf":0.001,"App\\Tests\\Service\\UserServiceTest::testHandleProfilePictureUploadsAndLogs":0.001,"App\\Tests\\Service\\UserServiceTest::testSyncUserRolesAddsRole":0,"App\\Tests\\Service\\UserServiceTest::testSyncUserRolesRemovesRole":0.001,"App\\Tests\\Service\\UserServiceTest::testIsPasswordStrong":0,"App\\Tests\\Service\\UserServiceTest::testCreateNewUserSuccess":0.001,"App\\Tests\\Service\\UserServiceTest::testLinkUserToOrganization":0.002,"App\\Tests\\Service\\UserServiceTest::testIsAdminOfOrganizationReturnsTrue":0.001,"App\\Tests\\Service\\UserOrganizationServiceTest::testDeactivateAllLinksByUser":0.001,"App\\Tests\\Service\\UserOrganizationServiceTest::testDeactivateAllLinksByOrganization":0.001,"App\\Tests\\Service\\UserOrganizationServiceTest::testDeactivateDoesNothingIfNoLinksFound":0,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testGroupUserOrganizationAppsByApplication":0.001,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testDeactivateAllLinksSuccess":0.001,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testDeactivateHandlesException":0.001,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testSyncRolesAddsNewRole":0.002,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testSyncRolesDeactivatesUnselectedRole":0.001,"App\\Tests\\Service\\UserOrganizationAppServiceTest::testSyncRolesHandlesSuperAdminLogic":0.001,"App\\Tests\\Service\\OrganizationsServiceTest::testHandleLogoSuccess":0.004,"App\\Tests\\Service\\OrganizationsServiceTest::testHandleLogoThrowsException":0.001,"App\\Tests\\Service\\OrganizationsServiceTest::testAppsAccess":0,"App\\Tests\\Service\\OrganizationsServiceTest::testNotifyOrganizationAdminsUserAccepted":0.001,"App\\Tests\\Service\\OrganizationsServiceTest::testNotifyOrganizationAdminsSkipsSelf":0.001,"App\\Tests\\Service\\NotificationServiceTest::testNotifyUserInvited":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyUserAcceptedInvite":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyUserDeactivated":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyUserActivated":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyOrganizationUpdate":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyAppAccessChangedGranted":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyAppAccessChangedRevoked":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyRoleChanged":0,"App\\Tests\\Service\\NotificationServiceTest::testNotifyUserDeleted":0,"App\\Tests\\Service\\LoggerServiceTest::testLogUserCreated":0.006,"App\\Tests\\Service\\LoggerServiceTest::testLogCGUAcceptanceLogsToTwoChannels":0.001,"App\\Tests\\Service\\LoggerServiceTest::testLogUserOrganizationLinkCreated":0,"App\\Tests\\Service\\LoggerServiceTest::testLogError":0,"App\\Tests\\Service\\LoggerServiceTest::testLogEntityNotFoundHandlesGlobals":0,"App\\Tests\\Service\\LoggerServiceTest::testLogAccessDenied":0,"App\\Tests\\Service\\LoggerServiceTest::testLogTokenRevocation":0,"App\\Tests\\Service\\LoggerServiceTest::testLogSuperAdmin":0,"App\\Tests\\Service\\LoggerServiceTest::testLogAWSAction":0,"App\\Tests\\Service\\LoggerServiceTest::testLogRoleEntityAssignment":0,"App\\Tests\\Service\\EmailServiceTest::testSendPasswordSetupEmailSuccess":0.004,"App\\Tests\\Service\\EmailServiceTest::testSendPasswordSetupEmailWithoutOrgIdInToken":0.001,"App\\Tests\\Service\\EmailServiceTest::testSendPasswordSetupEmailHandlesException":0.001,"App\\Tests\\Service\\EmailServiceTest::testSendExistingUserNotificationEmailSuccess":0.001,"App\\Tests\\Service\\EmailServiceTest::testSendExistingUserNotificationEmailHandlesException":0.001,"App\\Tests\\Service\\CguUserServiceTest::testIsLatestCguAcceptedReturnsFalseIfNoCguExists":0.004,"App\\Tests\\Service\\CguUserServiceTest::testIsLatestCguAcceptedReturnsFalseIfRelationDoesNotExist":0.001,"App\\Tests\\Service\\CguUserServiceTest::testIsLatestCguAcceptedReturnsTrueIfAccepted":0.001,"App\\Tests\\Service\\CguUserServiceTest::testAcceptLatestCguDoNothingIfNoCgu":0,"App\\Tests\\Service\\CguUserServiceTest::testAcceptLatestCguCreatesNewRelation":0.001,"App\\Tests\\Service\\CguUserServiceTest::testAcceptLatestCguUpdatesExistingRelation":0,"App\\Tests\\Service\\CguUserServiceTest::testDeclineCguSuccess":0,"App\\Tests\\Service\\CguUserServiceTest::testDeclineCguThrowsExceptionIfNotFound":0.001,"App\\Tests\\Service\\AwsServiceTest::testGenerateUUIDv4":0,"App\\Tests\\Service\\AwsServiceTest::testGetPublicUrl":0,"App\\Tests\\Service\\AwsServiceTest::testCreateBucketSuccess":0.005,"App\\Tests\\Service\\AwsServiceTest::testCreateBucketFailure":0.002,"App\\Tests\\Service\\AwsServiceTest::testDeleteBucket":0.002,"App\\Tests\\Service\\AwsServiceTest::testGetListObjectReturnsContents":0.002,"App\\Tests\\Service\\AwsServiceTest::testGetListObjectReturnsNullIfEmpty":0,"App\\Tests\\Service\\AwsServiceTest::testPutDocObj":0.003,"App\\Tests\\Service\\AwsServiceTest::testDeleteDocObj":0,"App\\Tests\\Service\\AwsServiceTest::testRenameDocObj":0.003,"App\\Tests\\Service\\AwsServiceTest::testMoveDocObj":0.003,"App\\Tests\\Service\\ActionServiceTest::testGetActivityColorRecent":0.002,"App\\Tests\\Service\\ActionServiceTest::testGetActivityColorMedium":0,"App\\Tests\\Service\\ActionServiceTest::testGetActivityColorOld":0,"App\\Tests\\Service\\ActionServiceTest::testFormatActivities":0.001,"App\\Tests\\Service\\ActionServiceTest::testCreateActionBasic":0.002,"App\\Tests\\Service\\ActionServiceTest::testCreateActionWithOrganizationAndTarget":0,"App\\Tests\\Service\\ActionServiceTest::testDescriptionActionSuccess":0,"App\\Tests\\Service\\ActionServiceTest::testDescriptionActionThrowsIfNoUser":0.001,"App\\Tests\\Service\\ActionServiceTest::testDescriptionActionThrowsIfInvalidType":0,"App\\Tests\\Service\\AccessTokenServiceTest::testRevokeUserTokensSuccess":0.006,"App\\Tests\\Service\\AccessTokenServiceTest::testRevokeUserTokensHandlesException":0.001,"App\\Tests\\Service\\AccessTokenServiceTest::testRevokeUserTokensDoesNothingIfNoneFound":0,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_ajax_returns_json_response":0.129,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_returns_404_for_invalid_organization":0.124,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_returns_404_for_non_existent_organization":0.115,"App\\Tests\\Controller\\ActionControllerTest::fetch_activities_access_denied_for_anonymous_user":0.023,"App\\Tests\\Controller\\UserControllerTest::view_user_displays_details_with_full_context":0.095,"App\\Tests\\Controller\\UserControllerTest::active_status_deactivates_user_via_ajax":0.016,"App\\Tests\\Controller\\UserControllerTest::data_returns_json_list_of_users":0.125,"App\\Tests\\Controller\\UserControllerTest::delete_soft_deletes_user":0.015,"App\\Tests\\Controller\\UserControllerTest::new_user_creation_redirects_correctly":0.37,"App\\Tests\\Controller\\ApplicationControllerTest::index_redirects_unauthenticated_user":0.014,"App\\Tests\\Controller\\ApplicationControllerTest::index_lists_applications_for_authenticated_user":0.086,"App\\Tests\\Controller\\ApplicationControllerTest::edit_page_denies_access_to_regular_users":0.2,"App\\Tests\\Controller\\ApplicationControllerTest::edit_page_loads_for_super_admin":0.038,"App\\Tests\\Controller\\ApplicationControllerTest::edit_submits_changes_successfully":0.054,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_non_existent_id":0.087,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_adds_organization_successfully":0.019,"App\\Tests\\Controller\\ApplicationControllerTest::edit_fails_gracefully_on_exception_with_mocked_logger":0.138,"App\\Tests\\Controller\\ApplicationControllerTest::index_denies_access_to_anonymous_users":0.008,"App\\Tests\\Controller\\ApplicationControllerTest::index_no_application_found":0.03,"App\\Tests\\Controller\\ApplicationControllerTest::edit_page_denies_access_to_admin_users":0.193,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_fails_on_invalid_organization":0.018,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_form_submission_with_missing_data":0.085,"App\\Tests\\Controller\\ApplicationControllerTest::authorize_fails_on_invalid_application":0.012,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_denies_access_to_admins":0.195,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_non_existent_id_get":0.048,"App\\Tests\\Controller\\ApplicationControllerTest::edit_handles_non_existent_id_post":0.048,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_denies_access_to_user":0.197,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_removes_organization_successfully":0.014,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_fails_on_invalid_organization":0.108,"App\\Tests\\Controller\\ApplicationControllerTest::revoke_fails_on_invalid_application":0.102,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_super_admin":0.047,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_single_app":0.197,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_mutiple_org":0.053,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_user":0.049,"App\\Tests\\Controller\\IndexControllerTest::test_index_unauthenticated":0.01,"App\\Tests\\Controller\\IndexControllerTest::test_index_no_organization":0.143,"App\\Tests\\Controller\\NotificationControllerTest::test_index_super_admin_success":0.037,"App\\Tests\\Controller\\NotificationControllerTest::test_index_non_super_admin_forbidden":0.391,"App\\Tests\\Controller\\NotificationControllerTest::test_unread_authenticated_user_success":0.013,"App\\Tests\\Controller\\NotificationControllerTest::test_markAsRead_authenticated_user_success":0.013,"App\\Tests\\Controller\\NotificationControllerTest::test_markAsRead_notification_not_found":0.012,"App\\Tests\\Controller\\NotificationControllerTest::test_markAsRead_unauthenticated_user_forbidden":0.035,"App\\Tests\\Controller\\OrganizationControllerTest::test_index_super_admin_success":0.146,"App\\Tests\\Controller\\OrganizationControllerTest::test_index_regular_user_forbidden":0.21,"App\\Tests\\Controller\\OrganizationControllerTest::test_index_no_organizations":0.034,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_super_admin_success":0.236,"App\\Tests\\Controller\\IndexControllerTest::test_index_successful_admin_single_org":0.06,"App\\Tests\\Controller\\NotificationControllerTest::test_unread_unauthenticated_user_forbidden":0.009,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_regular_user_forbidden":0.195,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_super_admin_invalid_data":0.204,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_super_admin_success":0.422,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_regular_user_forbidden":0.404,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_super_admin_invalid_data":0.354,"App\\Tests\\Controller\\OrganizationControllerTest::test_edit_nonexistent_organization_not_found":0.013,"App\\Tests\\Controller\\OrganizationControllerTest::test_create_super_admin_duplicate_email":0.239,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_super_admin_success":0.052,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_regular_user_forbidden":0.407,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_nonexistent_organization_not_found":0.283,"App\\Tests\\Controller\\OrganizationControllerTest::test_delete_organization_with_dependencies":0.154,"App\\Tests\\Controller\\SecurityControllerTest::test_login_page_is_accessible":0.077,"App\\Tests\\Controller\\SecurityControllerTest::test_login_page_contains_login_form":0.029,"App\\Tests\\Controller\\SecurityControllerTest::test_login_with_invalid_credentials_shows_error":0.065,"App\\Tests\\Controller\\SecurityControllerTest::test_login_with_valid_credentials_redirects":0.481,"App\\Tests\\Controller\\SecurityControllerTest::test_logout_redirects_to_login":0.105,"App\\Tests\\Controller\\UserControllerTest::test_index_super_admin_success":0.091,"App\\Tests\\Controller\\UserControllerTest::test_index_regular_user_forbidden":0.211,"App\\Tests\\Controller\\UserControllerTest::test_index_no_organizations":0.111,"App\\Tests\\Controller\\UserControllerTest::test_view_super_admin":0.062,"App\\Tests\\Controller\\UserControllerTest::test_index_no_users_found":0.114,"App\\Tests\\Controller\\UserControllerTest::test_view_regular_user_forbidden":0.105,"App\\Tests\\Controller\\UserControllerTest::test_view_admin":0.053,"App\\Tests\\Controller\\UserControllerTest::test_view_admin_different_organization_forbidden":0.119,"App\\Tests\\Controller\\UserControllerTest::test_view_user_self_success":0.039,"App\\Tests\\Controller\\UserControllerTest::test_view_user_self_with_organization_success":0.039,"App\\Tests\\Controller\\UserControllerTest::test_view_user_self_with_organization_forbidden":0.116,"App\\Tests\\Controller\\UserControllerTest::test_view_user_not_found":0.106,"App\\Tests\\Controller\\UserControllerTest::test_edit_super_admin_success":0.055,"App\\Tests\\Controller\\UserControllerTest::test_edit_regular_user_forbidden":0.056,"App\\Tests\\Controller\\UserControllerTest::test_edit_other_user_forbidden":0.196,"App\\Tests\\Controller\\UserControllerTest::test_edit_user_not_found":0.097,"App\\Tests\\Controller\\UserControllerTest::test_edit_admin_edit_other_user_success":0.218,"App\\Tests\\Controller\\UserControllerTest::test_edit_admin_user_not_found":0.1,"App\\Tests\\Controller\\UserControllerTest::test_edit_admin_edit_other_user_different_organization_forbidden":0.198,"App\\Tests\\Controller\\UserControllerTest::test_edit_user_not_found_admin":0.101,"App\\Tests\\Controller\\UserControllerTest::test_edit_super_admin_edit_other_user_success":0.222,"App\\Tests\\Controller\\UserControllerTest::test_edit_user_self_success":0.213,"App\\Tests\\Controller\\UserControllerTest::test_edit_user_self_with_organization_success":0.217,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_success":0.137,"App\\Tests\\Controller\\UserControllerTest::test_create_regular_user_forbidden":0.193,"App\\Tests\\Controller\\UserControllerTest::test_create_admin_forbidden":0.226,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_invalid_data":0.168,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_forbidden":0.153,"App\\Tests\\Controller\\UserControllerTest::test_create_super_admin_valid":0.56,"App\\Tests\\Controller\\UserControllerTest::test_create_admin_valid":0.674,"App\\Tests\\Controller\\UserControllerTest::test_create_admin_no_organization_forbidden":0.298,"App\\Tests\\Controller\\UserControllerTest::test_delete_super_admin_success":0.162,"App\\Tests\\Controller\\UserControllerTest::test_delete_admin_forbidden":0.273,"App\\Tests\\Controller\\UserControllerTest::test_delete_not_found":0.203,"App\\Tests\\Controller\\UserControllerTest::test_deactivate_super_admin_success":0.166,"App\\Tests\\Controller\\UserControllerTest::test_tabulator_super_admin_success":0.293}}
\ No newline at end of file
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 3949e0e..b0c8bad 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -9,9 +9,17 @@
+
+
+
+
+
+
+
+
tests
diff --git a/src/Security/UserChecker.php b/src/Security/UserChecker.php
index e37540b..7a5571a 100644
--- a/src/Security/UserChecker.php
+++ b/src/Security/UserChecker.php
@@ -21,20 +21,25 @@ class UserChecker implements UserCheckerInterface
public function checkPostAuth(UserInterface $user): void
{
- // runs after credentials are validated
- if (method_exists($user, 'isDeleted') && $user->isDeleted()) {
- throw new CustomUserMessageAccountStatusException('Votre compte a été supprimé.');
+ //if not Super admin, perform checks
+ // runs after credentials are validated
+ if (method_exists($user, 'isDeleted') && $user->isDeleted()) {
+ throw new CustomUserMessageAccountStatusException('Votre compte a été supprimé.');
+ }
+
+ // check if the user account is active
+ if (method_exists($user, 'isActive') && !$user->isActive()) {
+ throw new CustomUserMessageAccountStatusException('Votre compte est désactivé.');
+ }
+ if (!in_array('ROLE_SUPER_ADMIN', $user->getRoles(), true))
+ {
+
+ //check if the user is in an organization
+ $uo = $this->entityManager->getRepository(UsersOrganizations::class)->findOneBy(['users' => $user, 'isActive' => true]);
+ if (!$uo) {
+ throw new CustomUserMessageAccountStatusException('Vous n\'êtes pas relié à une organisation. veuillez contacter un administrateur.');
+ }
}
- // check if the user account is active
- if (method_exists($user, 'isActive') && !$user->isActive()) {
- throw new CustomUserMessageAccountStatusException('Votre compte est désactivé.');
- }
-
- //check if the user is in an organization
- $uo = $this->entityManager->getRepository(UsersOrganizations::class)->findOneBy(['users' => $user, 'isActive' => true]);
- if (!$uo) {
- throw new CustomUserMessageAccountStatusException('Vous n\'êtes pas relié à une organisation. veuillez contacter un administrateur.');
- }
}
-}
\ No newline at end of file
+}