Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

55 рядки
1.2KB

  1. <?php
  2. declare(strict_types=1);
  3. namespace Core\Auth;
  4. class PermissionService
  5. {
  6. /**
  7. * Maps Keycloak roles to application permissions.
  8. * Edit this to match your access-control requirements.
  9. *
  10. * @var array<string, list<string>>
  11. */
  12. private array $rolePermissions = [
  13. 'admin' => [
  14. 'users.view',
  15. 'users.create',
  16. 'users.edit',
  17. 'users.delete',
  18. 'settings.manage',
  19. ],
  20. 'manager' => [
  21. 'users.view',
  22. 'reports.view',
  23. 'projects.manage',
  24. ],
  25. 'user' => [
  26. 'dashboard.view',
  27. 'profile.view',
  28. 'profile.edit',
  29. ],
  30. ];
  31. /**
  32. * @param list<string> $roles
  33. * @return list<string>
  34. */
  35. public function permissionsForRoles(array $roles): array
  36. {
  37. $permissions = [];
  38. foreach ($roles as $role) {
  39. $permissions = array_merge($permissions, $this->rolePermissions[$role] ?? []);
  40. }
  41. return array_values(array_unique($permissions));
  42. }
  43. public function hasPermission(array $roles, string $permission): bool
  44. {
  45. return in_array($permission, $this->permissionsForRoles($roles), true);
  46. }
  47. }

Powered by TurnKey Linux.