Support edit permissions for mail rules and accounts

This commit is contained in:
shamoon
2023-09-22 01:01:35 -07:00
parent 54099d8441
commit 205106b566
8 changed files with 273 additions and 108 deletions

View File

@@ -6,7 +6,7 @@
</div>
<div class="modal-body">
<div class="row">
<div class="col">
<div class="col-md-4">
<pngx-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></pngx-input-text>
<pngx-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></pngx-input-select>
<pngx-input-text i18n-title title="Folder" formControlName="folder" i18n-hint hint="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." [error]="error?.folder"></pngx-input-text>
@@ -15,7 +15,7 @@
<pngx-input-select i18n-title title="Consumption scope" [items]="consumptionScopeOptions" formControlName="consumption_scope" i18n-hint hint="See docs for .eml processing requirements"></pngx-input-select>
<pngx-input-number i18n-title title="Rule order" formControlName="order" [showAdd]="false" [error]="error?.order"></pngx-input-number>
</div>
<div class="col">
<div class="col-md-4">
<p class="small" i18n>Paperless will only process mails that match <em>all</em> of the filters specified below.</p>
<pngx-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></pngx-input-text>
<pngx-input-text i18n-title title="Filter to" formControlName="filter_to" [error]="error?.filter_to"></pngx-input-text>
@@ -23,7 +23,7 @@
<pngx-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></pngx-input-text>
<pngx-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" i18n-hint hint="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." [error]="error?.filter_attachment_filename"></pngx-input-text>
</div>
<div class="col">
<div class="col-md-4">
<pngx-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></pngx-input-select>
<pngx-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></pngx-input-text>
<pngx-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></pngx-input-select>

View File

@@ -5,7 +5,7 @@
</div>
<div class="modal-body">
<p class="mb-3" *ngIf="message" [innerHTML]="message | safeHtml"></p>
<p *ngIf="!object && message" class="mb-3" [innerHTML]="message | safeHtml"></p>
<form [formGroup]="form">
<pngx-permissions-form [users]="users" formControlName="permissions_form"></pngx-permissions-form>

View File

@@ -19,7 +19,7 @@ const set_permissions = {
users: [1],
groups: [],
},
edit: {
change: {
users: [1],
groups: [],
},
@@ -78,6 +78,10 @@ describe('PermissionsDialogComponent', () => {
})
it('should return permissions', () => {
expect(component.permissions).toEqual({
owner: null,
set_permissions: null,
})
component.form.get('permissions_form').setValue(set_permissions)
expect(component.permissions).toEqual(set_permissions)
})
@@ -87,4 +91,16 @@ describe('PermissionsDialogComponent', () => {
component.cancelClicked()
expect(closeSpy).toHaveBeenCalled()
})
it('should support edit permissions on object', () => {
let obj = {
id: 1,
name: 'account1',
owner: set_permissions.owner,
permissions: set_permissions.set_permissions,
}
component.object = obj
expect(component.title).toEqual(`Edit permissions for ${obj.name}`)
expect(component.permissions).toEqual(set_permissions)
})
})

View File

@@ -1,6 +1,7 @@
import { Component, EventEmitter, Input, Output } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
import { PaperlessUser } from 'src/app/data/paperless-user'
import { UserService } from 'src/app/services/rest/user.service'
@@ -11,6 +12,7 @@ import { UserService } from 'src/app/services/rest/user.service'
})
export class PermissionsDialogComponent {
users: PaperlessUser[]
private o: ObjectWithPermissions = undefined
constructor(
public activeModal: NgbActiveModal,
@@ -19,11 +21,24 @@ export class PermissionsDialogComponent {
this.userService.listAll().subscribe((r) => (this.users = r.results))
}
@Output()
public confirmClicked = new EventEmitter()
@Input()
title = $localize`Set Permissions`
title = $localize`Set permissions`
set object(o: ObjectWithPermissions) {
this.o = o
this.title = $localize`Edit permissions for ` + o['name']
this.form.patchValue({
permissions_form: {
owner: o.owner,
set_permissions: o.permissions,
},
})
}
get object(): ObjectWithPermissions {
return this.o
}
form = new FormGroup({
permissions_form: new FormControl(),
@@ -39,7 +54,6 @@ export class PermissionsDialogComponent {
}
}
@Input()
message = $localize`Note that permissions set here will override any existing permissions`
cancelClicked() {