SIGN IN SIGN UP

fix(auth): audit security fixes and add gap-covering tests

- AuthorizationExplainController: validate resource_type via AttributeRegistry
- HasRoles::hasRole(): check only the active role, not all assigned roles
- RoleChartCsvExporter: accept scoped Collection to avoid loading all roles
- PermissionRegistrySynchronizer::prune(): soft-deprecate instead of hard-delete
- PermissionGroup: add is_active column with migration
- Frontend permissions.ts: add 5 missing permission constants
- Tests: inactive-role denial, 3-level inheritance, circular parent prevention,
  self-parenting rejection, document download 403
S
Sepehr Qorbani committed
abbd46e8a99f3f0d334baf5a0dff977dc355bf7d
Parent: de5108e