diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 8b39f8330..14ac83c6c 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -53,9 +53,13 @@ const dossierTemplateIdRoutes: IqserRoutes = [ { path: 'rules', component: BaseDossierTemplateScreenComponent, - canActivate: [CompositeRouteGuard], + canActivate: [CompositeRouteGuard, IqserPermissionsGuard], data: { routeGuards: [IqserAuthGuard, RedRoleGuard], + permissions: { + allow: [ROLES.rules.read], + redirectTo: 'info', + }, }, loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule), }, diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index 6cdd400f6..abf9ed78a 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -87,7 +87,7 @@ export class AdminSideNavComponent implements OnInit { { screen: 'rules', label: _('admin-side-nav.rule-editor'), - hideIf: !this.userPreferenceService.areDevFeaturesEnabled, + hideIf: !this.userPreferenceService.areDevFeaturesEnabled || !this._permissionsService.has(ROLES.rules.read), }, { screen: 'default-colors', diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html index 5c630fc25..97db72472 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen/rules-screen.component.html @@ -1,6 +1,6 @@ -
+
this._canOcrFile(_file, dossier) && acc, true) ); } @@ -200,7 +200,10 @@ export class PermissionsService { isReadyForApproval(file: File | File[], dossier: Dossier): boolean { const files = file instanceof File ? [file] : file; - return files.reduce((acc, _file) => this._isReadyForApproval(_file, dossier) && acc, true); + return ( + this._iqserPermissionsService.has(ROLES.files.setApproved) && + files.reduce((acc, _file) => this._isReadyForApproval(_file, dossier) && acc, true) + ); } canSetUnderApproval(file: File | File[], dossier: Dossier): boolean { @@ -333,6 +336,14 @@ export class PermissionsService { ); } + canDownloadRedactedFile() { + return this._iqserPermissionsService.has(ROLES.files.processDownload); + } + + canEditRules() { + return this._iqserPermissionsService.has(ROLES.rules.write) && this.isAdmin(); + } + private _canDeleteEntity(entity: Dictionary): boolean { return !entity.systemManaged; } diff --git a/apps/red-ui/src/app/users/roles.ts b/apps/red-ui/src/app/users/roles.ts index a512227d8..98290409c 100644 --- a/apps/red-ui/src/app/users/roles.ts +++ b/apps/red-ui/src/app/users/roles.ts @@ -2,13 +2,9 @@ export const ROLES = { RED_CREATE_TENANT: 'red-create-tenant', RED_DEPLOYMENT_INFO: 'red-deployment-info', RED_GET_TENANTS: 'red-get-tenants', - RED_PROCESS_DOWNLOAD: 'red-process-download', RED_PROCESS_MANUAL_REDACTION_REQUEST: 'red-process-manual-redaction-request', - RED_READ_RULES: 'red-read-rules', RED_READ_VERSIONS: 'red-read-versions', RED_REINDEX: 'red-reindex', - RED_ROTATE_PAGE: 'red-rotate-page', - RED_WRITE_RULES: 'red-write-rules', managePreferences: 'red-manage-user-preferences', updateMyProfile: 'red-update-my-profile', getRss: 'red-get-rss', @@ -21,6 +17,10 @@ export const ROLES = { search: 'red-search', searchAudit: 'red-search-audit-log', manageAclPermissions: 'red-manage-acl-permissions', + rules: { + read: 'red-read-rules', + write: 'red-write-rules', + }, redactions: { write: 'red-add-redaction', readManual: 'red-read-manual-redactions', @@ -89,6 +89,7 @@ export const ROLES = { files: { delete: 'red-delete-file', readStatus: 'red-read-file-status', + processDownload: 'red-process-download', downloadAnnotated: 'red-download-annotated-file', downloadOriginal: 'red-download-original-file', downloadRedacted: 'red-download-redacted-file', @@ -97,6 +98,7 @@ export const ROLES = { upload: 'red-upload-file', setApproved: 'red-set-status-approved', setUnderApproval: 'red-set-status-under-approval', + rotatePage: 'red-rotate-page', }, templates: { read: 'red-read-dossier-templates',