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',