]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
retain user / group permissions the UI doesnt use
authorMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Mon, 14 Nov 2022 07:58:49 +0000 (23:58 -0800)
committerMichael Shamoon <4887959+shamoon@users.noreply.github.com>
Tue, 15 Nov 2022 08:44:32 +0000 (00:44 -0800)
src-ui/src/app/services/rest/group.service.ts
src-ui/src/app/services/rest/user.service.ts

index 7c913b92cec5dca8086dd25d714ced09acf8426d..800c3c71b35f14e3a6411a5b87b0b4ae89984199 100644 (file)
@@ -1,13 +1,31 @@
 import { HttpClient } from '@angular/common/http'
 import { Injectable } from '@angular/core'
+import { Observable, switchMap } from 'rxjs'
 import { PaperlessGroup } from 'src/app/data/paperless-group'
+import { PermissionsService } from '../permissions.service'
 import { AbstractNameFilterService } from './abstract-name-filter-service'
 
 @Injectable({
   providedIn: 'root',
 })
 export class GroupService extends AbstractNameFilterService<PaperlessGroup> {
-  constructor(http: HttpClient) {
+  constructor(http: HttpClient, private permissionService: PermissionsService) {
     super(http, 'groups')
   }
+
+  update(o: PaperlessGroup): Observable<PaperlessGroup> {
+    return this.getCached(o.id).pipe(
+      switchMap((initialGroup) => {
+        initialGroup.permissions?.forEach((perm) => {
+          const { typeKey, actionKey } =
+            this.permissionService.getPermissionKeys(perm)
+          if (!typeKey || !actionKey) {
+            // dont lose permissions the UI doesnt use
+            o.permissions.push(perm)
+          }
+        })
+        return super.update(o)
+      })
+    )
+  }
 }
index e8466a2a285065528e7d3518bf422524f1655a8d..125a35ce62f03727c69b6b4c3dfb4f4d61691bcf 100644 (file)
@@ -1,13 +1,31 @@
 import { HttpClient } from '@angular/common/http'
 import { Injectable } from '@angular/core'
+import { Observable, switchMap } from 'rxjs'
 import { PaperlessUser } from 'src/app/data/paperless-user'
+import { PermissionsService } from '../permissions.service'
 import { AbstractNameFilterService } from './abstract-name-filter-service'
 
 @Injectable({
   providedIn: 'root',
 })
 export class UserService extends AbstractNameFilterService<PaperlessUser> {
-  constructor(http: HttpClient) {
+  constructor(http: HttpClient, private permissionService: PermissionsService) {
     super(http, 'users')
   }
+
+  update(o: PaperlessUser): Observable<PaperlessUser> {
+    return this.getCached(o.id).pipe(
+      switchMap((initialUser) => {
+        initialUser.user_permissions?.forEach((perm) => {
+          const { typeKey, actionKey } =
+            this.permissionService.getPermissionKeys(perm)
+          if (!typeKey || !actionKey) {
+            // dont lose permissions the UI doesnt use
+            o.user_permissions.push(perm)
+          }
+        })
+        return super.update(o)
+      })
+    )
+  }
 }