This commit is contained in:
Charles 2025-10-27 12:20:03 +01:00
parent b430e13e3b
commit 003ee40992
1 changed files with 33 additions and 29 deletions

View File

@ -3,22 +3,20 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\Apps; use App\Entity\Apps;
use App\Entity\Organizations;
use App\Entity\Roles; use App\Entity\Roles;
use App\Entity\User; use App\Entity\User;
use App\Entity\UserOrganizatonApp; use App\Entity\UserOrganizatonApp;
use App\Entity\UsersOrganizations; use App\Entity\UsersOrganizations;
use App\Form\UserForm; use App\Form\UserForm;
use App\Repository\OrganizationsRepository;
use App\Repository\UserRepository;
use App\Repository\UsersOrganizationsRepository;
use App\Service\ActionService; use App\Service\ActionService;
use App\Service\AwsService;
use App\Service\OrganizationsService;
use App\Service\UserOrganizationAppService; use App\Service\UserOrganizationAppService;
use App\Service\UserOrganizationService; use App\Service\UserOrganizationService;
use App\Service\UserService; use App\Service\UserService;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Asset\Packages;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@ -35,7 +33,10 @@ class UserController extends AbstractController
private readonly UserService $userService, private readonly UserService $userService,
private readonly ActionService $actionService, private readonly ActionService $actionService,
private readonly UserOrganizationAppService $userOrganizationAppService, private readonly UserOrganizationAppService $userOrganizationAppService,
private readonly UserOrganizationService $userOrganizationService, private readonly OrganizationsService $organizationsService, private readonly UserOrganizationService $userOrganizationService,
private readonly UserRepository $userRepository,
private readonly UsersOrganizationsRepository $uoRepository,
private readonly OrganizationsRepository $organizationRepository,
) )
{ {
} }
@ -48,9 +49,9 @@ class UserController extends AbstractController
$user = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $user = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->isGranted('ROLE_SUPER_ADMIN')) { if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$uo = $this->entityManager->getRepository(UsersOrganizations::class)->findUsersWithOrganization(); $uo = $this->uoRepository->findUsersWithOrganization();
$noOrgUsers = $this->userService->formatNoOrgUsersAsAssoc( $noOrgUsers = $this->userService->formatNoOrgUsersAsAssoc(
$this->entityManager->getRepository(User::class)->findUsersWithoutOrganization()); $this->userRepository->findUsersWithoutOrganization());
$usersByOrganization = $this->userService->groupByOrganization($uo); $usersByOrganization = $this->userService->groupByOrganization($uo);
$usersByOrganization += $noOrgUsers; $usersByOrganization += $noOrgUsers;
@ -72,18 +73,18 @@ class UserController extends AbstractController
$this->denyAccessUnlessGranted('ROLE_USER'); $this->denyAccessUnlessGranted('ROLE_USER');
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser)) { if ($this->userService->hasAccessTo($actingUser)) {
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
try { try {
$orgId = $request->query->get('organizationId'); $orgId = $request->query->get('organizationId');
if ($orgId) { if ($orgId) {
$orgs = $this->entityManager->getRepository(Organizations::class)->findBy(['id' => $orgId]); $orgs = $this->organizationRepository->findBy(['id' => $orgId]);
$uo = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['users' => $user, 'organization' => $orgs]); $uo = $this->uoRepository->findBy(['users' => $user, 'organization' => $orgs]);
if (!$uo) { if (!$uo) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$uoActive = $uo[0]->isActive(); $uoActive = $uo[0]->isActive();
} else { } else {
$uo = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['users' => $user, 'isActive' => true]); $uo = $this->uoRepository->findBy(['users' => $user, 'isActive' => true]);
foreach ($uo as $u) { foreach ($uo as $u) {
$orgs[] = $u->getOrganization(); $orgs[] = $u->getOrganization();
} }
@ -112,7 +113,7 @@ class UserController extends AbstractController
$this->denyAccessUnlessGranted('ROLE_USER'); $this->denyAccessUnlessGranted('ROLE_USER');
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser)) { if ($this->userService->hasAccessTo($actingUser)) {
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
@ -130,7 +131,7 @@ class UserController extends AbstractController
$this->entityManager->persist($user); $this->entityManager->persist($user);
$this->entityManager->flush(); $this->entityManager->flush();
if ($request->get('organizationId')) { if ($request->get('organizationId')) {
$org = $this->entityManager->getRepository(Organizations::class)->find($request->get('organizationId')); $org = $this->organizationRepository->find($request->get('organizationId'));
if ($org) { if ($org) {
$this->actionService->createAction("Edit user information", $actingUser, $org, $user->getUserIdentifier()); $this->actionService->createAction("Edit user information", $actingUser, $org, $user->getUserIdentifier());
} }
@ -175,7 +176,7 @@ class UserController extends AbstractController
//FOR TEST PURPOSES, SETTING A DEFAULT RANDOM PASSWORD //FOR TEST PURPOSES, SETTING A DEFAULT RANDOM PASSWORD
$user->setPassword($this->userService->generateRandomPassword()); $user->setPassword($this->userService->generateRandomPassword());
if ($orgId) { if ($orgId) {
$org = $this->entityManager->getRepository(Organizations::class)->find($orgId); $org = $this->organizationRepository->find($orgId);
if ($org) { if ($org) {
$uo = new UsersOrganizations(); $uo = new UsersOrganizations();
$uo->setUsers($user); $uo->setUsers($user);
@ -208,13 +209,16 @@ class UserController extends AbstractController
$this->denyAccessUnlessGranted('ROLE_ADMIN'); $this->denyAccessUnlessGranted('ROLE_ADMIN');
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true)) { if ($this->userService->hasAccessTo($actingUser, true)) {
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$user->setIsActive(false); $user->setIsActive(false);
$user->setModifiedAt(new \DateTimeImmutable('now')); $user->setModifiedAt(new \DateTimeImmutable('now'));
$this->userOrganizationService->deactivateAllUserOrganizationLinks($user, $actingUser); $this->userOrganizationService->deactivateAllUserOrganizationLinks($user, $actingUser);
if($this->userService->isUserConnected($user)){
$this->userService->revokeUserTokens($user->getUserIdentifier());
}
$this->entityManager->persist($user); $this->entityManager->persist($user);
$this->entityManager->flush(); $this->entityManager->flush();
$this->actionService->createAction("Deactivate user", $actingUser, null, $user->getUserIdentifier()); $this->actionService->createAction("Deactivate user", $actingUser, null, $user->getUserIdentifier());
@ -231,7 +235,7 @@ class UserController extends AbstractController
$this->denyAccessUnlessGranted('ROLE_ADMIN'); $this->denyAccessUnlessGranted('ROLE_ADMIN');
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true)) { if ($this->userService->hasAccessTo($actingUser, true)) {
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
@ -254,15 +258,15 @@ class UserController extends AbstractController
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true)) { if ($this->userService->hasAccessTo($actingUser, true)) {
$orgId = $request->get('organizationId'); $orgId = $request->get('organizationId');
$org = $this->entityManager->getRepository(Organizations::class)->find($orgId); $org = $this->organizationRepository->find($orgId);
if (!$org) { if (!$org) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$uo = $this->entityManager->getRepository(UsersOrganizations::class)->findOneBy(['users' => $user, $uo = $this->uoRepository->findOneBy(['users' => $user,
'organization' => $org, 'organization' => $org,
'isActive' => true]); 'isActive' => true]);
if (!$uo) { if (!$uo) {
@ -287,15 +291,15 @@ class UserController extends AbstractController
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true)) { if ($this->userService->hasAccessTo($actingUser, true)) {
$orgId = $request->get('organizationId'); $orgId = $request->get('organizationId');
$org = $this->entityManager->getRepository(Organizations::class)->find($orgId); $org = $this->organizationRepository->find($orgId);
if (!$org) { if (!$org) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
$uo = $this->entityManager->getRepository(UsersOrganizations::class)->findOneBy(['users' => $user, $uo = $this->uoRepository->findOneBy(['users' => $user,
'organization' => $org, 'organization' => $org,
'isActive' => false]); 'isActive' => false]);
if (!$uo) { if (!$uo) {
@ -317,7 +321,7 @@ class UserController extends AbstractController
{ {
$this->denyAccessUnlessGranted("ROLE_SUPER_ADMIN"); $this->denyAccessUnlessGranted("ROLE_SUPER_ADMIN");
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
$user = $this->entityManager->getRepository(User::class)->find($id); $user = $this->userRepository->find($id);
if (!$user) { if (!$user) {
throw $this->createNotFoundException(self::NOT_FOUND); throw $this->createNotFoundException(self::NOT_FOUND);
} }
@ -388,7 +392,7 @@ class UserController extends AbstractController
$page = max(1, (int)$request->query->get('page', 1)); $page = max(1, (int)$request->query->get('page', 1));
$size = max(1, (int)$request->query->get('size', 10)); $size = max(1, (int)$request->query->get('size', 10));
$repo = $this->entityManager->getRepository(User::class); $repo = $this->userRepository;
// Base query: keep your constraints intact (isDeleted=false, isActive=true) // Base query: keep your constraints intact (isDeleted=false, isActive=true)
$qb = $repo->createQueryBuilder('u') $qb = $repo->createQueryBuilder('u')
@ -430,7 +434,7 @@ class UserController extends AbstractController
{ {
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) { if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) {
$totalUsers = $this->entityManager->getRepository(User::class)->count(['isDeleted' => false, 'isActive' => true]); $totalUsers = $this->userRepository->count(['isDeleted' => false, 'isActive' => true]);
return $this->render('user/indexTest.html.twig', [ return $this->render('user/indexTest.html.twig', [
'users' => $totalUsers 'users' => $totalUsers
]); ]);
@ -448,7 +452,7 @@ class UserController extends AbstractController
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) { if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) {
$orgId = $request->query->get('orgId'); $orgId = $request->query->get('orgId');
$uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['organization' => $orgId], limit: 5, orderBy: ['createdAt' => 'DESC']); $uos = $this->uoRepository->findBy(['organization' => $orgId], limit: 5, orderBy: ['createdAt' => 'DESC']);
// Map to array (keep isConnected) // Map to array (keep isConnected)
@ -483,7 +487,7 @@ class UserController extends AbstractController
$actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier());
if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) { if ($this->userService->hasAccessTo($actingUser, true) && $this->isGranted("ROLE_ADMIN")) {
$orgId = $request->query->get('orgId'); $orgId = $request->query->get('orgId');
$uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['organization' => $orgId]); $uos = $this->uoRepository->findBy(['organization' => $orgId]);
$roleAdmin = $this->entityManager->getRepository(Roles::class)->findOneBy(['name' => 'ADMIN']); $roleAdmin = $this->entityManager->getRepository(Roles::class)->findOneBy(['name' => 'ADMIN']);
$users = []; $users = [];
foreach ($uos as $uo) { foreach ($uos as $uo) {
@ -533,7 +537,7 @@ class UserController extends AbstractController
// $sorters = $request->query->all('sorters') ?? []; // $sorters = $request->query->all('sorters') ?? [];
// $filters = $request->query->all('filters') ?? []; // $filters = $request->query->all('filters') ?? [];
$repo = $this->entityManager->getRepository(UsersOrganizations::class); $repo = $this->uoRepository;
// Base query // Base query
$qb = $repo->createQueryBuilder('uo') $qb = $repo->createQueryBuilder('uo')