src/AppBundle/Controller/ui/RoleController.php line 41

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller\ui;
  3. use Psr\Container\ContainerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Psr\Log\LoggerInterface;
  9. use AppBundle\Service\HttpHelper;
  10. use AppBundle\Service\PdoHelper;
  11. use AppBundle\CSPro\CSProResponse;
  12. use AppBundle\CSPro\RolesRepository;
  13. use AppBundle\CSPro\User\RolePermissions;
  14. use AppBundle\CSPro\User\RoleDictionaryPermissions;
  15. use AppBundle\CSPro\User\Role;
  16. class RoleController extends AbstractController implements TokenAuthenticatedController {
  17.     private $rolesRepository;
  18.     public function __construct(private HttpHelper $client, private PdoHelper $pdo, private LoggerInterface $logger) {
  19.         
  20.     }
  21.     //overrider the setcontainer to get access to container parameters and initiailize the roles repository
  22.     public function setContainer(ContainerInterface $container null): ?ContainerInterface {
  23.         $this->rolesRepository = new RolesRepository($this->pdo$this->logger);
  24.         return parent::setContainer($container);
  25.     }
  26.     #[Route('/roles'name'roles'methods: ['GET'])]
  27.     public function viewRoleListAction(Request $request): Response {
  28.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  29.         return $this->render('roles.twig', []);
  30.     }
  31.     #[Route('/getRoles'name'get-roles'methods: ['GET'])]
  32.     public function getRoles(Request $request): Response {
  33.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  34.         $roles $this->rolesRepository->getRoles();
  35.         $this->logger->debug((is_countable($roles) ? count($roles) : 0) . ' the roles are' json_encode($rolesJSON_THROW_ON_ERROR));
  36.         $response = new Response(json_encode($rolesJSON_THROW_ON_ERROR));
  37.         $response->headers->set('Content-Length'strlen($response->getContent()));
  38.         return $response;
  39.     }
  40.     #[Route('/getDictionaryPermissions'name'get-dictionary-permissions'methods: ['GET'])]
  41.     public function getDictionaryPermissions(Request $request): Response {
  42.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  43.         $rowNumber $request->get('rowNumber');
  44.         if (isset($rowNumber)) {
  45.             $roles $this->rolesRepository->getRoles();
  46.             //$this->logger->error('getRoles() = ' . print_r($roles, true));
  47.             // Get dictionaryPermissions for the role at rowNumber
  48.             $dictionaryPermissions $roles[$rowNumber]->rolePermissions->dictionaryPermissions;
  49.         } else {
  50.             $role $this->rolesRepository->getNewRole();
  51.             $dictionaryPermissions $role->rolePermissions->dictionaryPermissions;
  52.         }
  53.         $indexedDictionaryPermissions = [];
  54.         foreach ($dictionaryPermissions as $dp) {
  55.             // Convert associative array to indexed array, so DataTable's row container is indexed
  56.             $indexedDictionaryPermissions[] = $dp;
  57.         }
  58.         $response = new Response(json_encode($indexedDictionaryPermissionsJSON_THROW_ON_ERROR));
  59.         $response->headers->set('Content-Length'strlen($response->getContent()));
  60.         return $response;
  61.     }
  62.     #[Route('/addRole'name'add-role'methods: ['POST'])]
  63.     public function addRole(Request $request): CSProResponse {
  64.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  65.         $roleName $request->get('roleName');
  66.         $dataPermission $request->get('dataPermission');
  67.         $reportsPermission $request->get('reportsPermission');
  68.         $appsPermission $request->get('appsPermission');
  69.         $usersPermission $request->get('usersPermission');
  70.         $rolesPermission $request->get('rolesPermission');
  71.         $dictionaryPermissions $request->get('dictionaryPermissions');
  72.         $settingsPermission $request->get('settingsPermissions');
  73.         is_array($dictionaryPermissions) ?: $dictionaryPermissions = [];
  74.         $role = new Role();
  75.         $role->name $roleName;
  76.         $dataPermission === "true" $role->rolePermissions->setPermission(RolePermissions::DATA_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::DATA_ALLfalse);
  77.         $reportsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::REPORTS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::REPORTS_ALLfalse);
  78.         $appsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::APPS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::APPS_ALLfalse);
  79.         $usersPermission === "true" $role->rolePermissions->setPermission(RolePermissions::USERS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::USERS_ALLfalse);
  80.         $rolesPermission === "true" $role->rolePermissions->setPermission(RolePermissions::ROLES_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::ROLES_ALLfalse);
  81.         $settingsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::SETTINGS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::SETTINGS_ALLfalse);
  82.         foreach ($dictionaryPermissions as $dp) {
  83.             $roleDictPermission = new RoleDictionaryPermissions($dp['dictionaryname'], $dp['dictionaryId'], $dp['syncUpload'], $dp['syncDownload'], $dp['dictionarylabel']);
  84.             $role->rolePermissions->setDictionaryPermission($roleDictPermission);
  85.         }
  86.         try {
  87.             $result $this->rolesRepository->addRole($role);
  88.             if ($result === true)
  89.                 return new CSProResponse(json_encode("Added $roleName"JSON_THROW_ON_ERROR), CSProResponse::HTTP_OK);
  90.             else
  91.                 return new CSProResponse(json_encode("Failed to add $roleName"JSON_THROW_ON_ERROR), CSProResponse::HTTP_INTERNAL_SERVER_ERROR);
  92.         } catch (\Exception $e) {
  93.             $result['code'] = 500;
  94.             $duplicateErrMsg 'Integrity constraint violation: 1062';
  95.             if (strpos($e->getMessage(), $duplicateErrMsg)) {
  96.                 $result['description'] = "Role name `$roleName` already in use";
  97.             } else {
  98.                 $result['description'] = "Failed to add role: $roleName";
  99.             }
  100.             $response = new CSProResponse();
  101.             $response->setError($result['code'], 'add_role_error'$result ['description']);
  102.             return $response;
  103.         }
  104.     }
  105.     #[Route('/editRole'name'edit-role'methods: ['POST'])]
  106.     public function editRole(Request $request): CSProResponse {
  107.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  108.         $roleId $request->get('roleId');
  109.         $roleName $request->get('roleName');
  110.         $dataPermission $request->get('dataPermission');
  111.         $reportsPermission $request->get('reportsPermission');
  112.         $appsPermission $request->get('appsPermission');
  113.         $usersPermission $request->get('usersPermission');
  114.         $rolesPermission $request->get('rolesPermission');
  115.         $dictionaryPermissions $request->get('dictionaryPermissions');
  116.         $settingsPermission $request->get('settingsPermission');
  117.         $role = new Role();
  118.         $role->name $roleName;
  119.         $role->id $roleId;
  120.         $dataPermission === "true" $role->rolePermissions->setPermission(RolePermissions::DATA_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::DATA_ALLfalse);
  121.         $reportsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::REPORTS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::REPORTS_ALLfalse);
  122.         $appsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::APPS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::APPS_ALLfalse);
  123.         $usersPermission === "true" $role->rolePermissions->setPermission(RolePermissions::USERS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::USERS_ALLfalse);
  124.         $rolesPermission === "true" $role->rolePermissions->setPermission(RolePermissions::ROLES_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::ROLES_ALLfalse);
  125.         $settingsPermission === "true" $role->rolePermissions->setPermission(RolePermissions::SETTINGS_ALLtrue) : $role->rolePermissions->setPermission(RolePermissions::SETTINGS_ALLfalse);
  126.         foreach ($dictionaryPermissions as $dp) {
  127.             //$this->logger->error($dp['dictionaryname']);
  128.             //$this->logger->error($dp['dictionaryId']);
  129.             //$this->logger->error($dp['syncUpload']);
  130.             //$this->logger->error($dp['syncDownload']);
  131.             $roleDictPermission = new RoleDictionaryPermissions($dp['dictionaryname'], $dp['dictionaryId'], $dp['syncUpload'], $dp['syncDownload'], $dp['dictionarylabel']);
  132.             $role->rolePermissions->setDictionaryPermission($roleDictPermission);
  133.             //$this->logger->error('Check dictionary permissions: ' . print_r($role->rolePermissions->getDictionaryPermissions($dp['dictionaryname']), true));
  134.         }
  135.         try {
  136.             // $this->logger->debug('printing role ' . print_r($role, true));
  137.             $result $this->rolesRepository->saveRole($role);
  138.             if ($result === true)
  139.                 return new CSProResponse(json_encode("Saved permissions for $roleName"JSON_THROW_ON_ERROR), CSProResponse::HTTP_OK);
  140.             else
  141.                 return new CSProResponse(json_encode("Failed to save permissions for $roleName"JSON_THROW_ON_ERROR), CSProResponse::HTTP_INTERNAL_SERVER_ERROR);
  142.         } catch (\Exception) {
  143.             $result['code'] = 500;
  144.             $result['description'] = "Failed to save permissions for $roleName";
  145.             $response = new CSProResponse();
  146.             $response->setError($result['code'], 'save_permissions_error'$result ['description']);
  147.             return $response;
  148.         }
  149.     }
  150.     #[Route('/deleteRole'name'delete-role'methods: ['DELETE'])]
  151.     public function DeleteRole(Request $request): Response {
  152.         $this->denyAccessUnlessGranted('ROLE_ROLES_ALL');
  153.         $result = [];
  154.         $roleName $request->get('roleName');
  155.         $roleId $request->get('roleId');
  156.         $count $this->rolesRepository->deleteRole($roleId$roleName);
  157.         if ($count) {
  158.             $result['description'] = 'Deleted role ' $roleName;
  159.             $this->logger->debug($result['description']);
  160.             $response = new Response(json_encode($result['description'], JSON_THROW_ON_ERROR), Response::HTTP_OK);
  161.         } else {
  162.             $result['description'] = 'Failed deleting role ' $roleName;
  163.             $response = new Response(json_encode($result['description'], JSON_THROW_ON_ERROR), Response::HTTP_NOT_FOUND);
  164.         }
  165.         $response->headers->set('Content-Length'strlen($response->getContent()));
  166.         return $response;
  167.     }
  168. }