Fix: dont display or fetch users or groups with insufficient perms (#11111)

This commit is contained in:
shamoon
2025-10-22 00:36:40 -07:00
committed by GitHub
parent 597c2629dd
commit e4ac079cd7
2 changed files with 49 additions and 27 deletions

View File

@@ -7,7 +7,7 @@
> >
</pngx-page-header> </pngx-page-header>
@if (users) { @if (canViewUsers && users) {
<h4 class="d-flex"> <h4 class="d-flex">
<ng-container i18n>Users</ng-container> <ng-container i18n>Users</ng-container>
<button type="button" class="btn btn-sm btn-outline-primary ms-4" (click)="editUser()" *pngxIfPermissions="{ action: PermissionAction.Add, type: PermissionType.User }"> <button type="button" class="btn btn-sm btn-outline-primary ms-4" (click)="editUser()" *pngxIfPermissions="{ action: PermissionAction.Add, type: PermissionType.User }">
@@ -45,7 +45,7 @@
</ul> </ul>
} }
@if (groups) { @if (canViewGroups && groups) {
<h4 class="mt-4 d-flex"> <h4 class="mt-4 d-flex">
<ng-container i18n>Groups</ng-container> <ng-container i18n>Groups</ng-container>
<button type="button" class="btn btn-sm btn-outline-primary ms-4" (click)="editGroup()" *pngxIfPermissions="{ action: PermissionAction.Add, type: PermissionType.Group }"> <button type="button" class="btn btn-sm btn-outline-primary ms-4" (click)="editGroup()" *pngxIfPermissions="{ action: PermissionAction.Add, type: PermissionType.Group }">
@@ -86,7 +86,7 @@
</ul> </ul>
} }
@if (!users || !groups) { @if ((canViewUsers && !users) || (canViewGroups && !groups)) {
<div> <div>
<div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div> <div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
<div class="visually-hidden" i18n>Loading...</div> <div class="visually-hidden" i18n>Loading...</div>

View File

@@ -5,7 +5,11 @@ import { Subject, first, takeUntil } from 'rxjs'
import { Group } from 'src/app/data/group' import { Group } from 'src/app/data/group'
import { User } from 'src/app/data/user' import { User } from 'src/app/data/user'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsService } from 'src/app/services/permissions.service' import {
PermissionAction,
PermissionType,
PermissionsService,
} from 'src/app/services/permissions.service'
import { GroupService } from 'src/app/services/rest/group.service' import { GroupService } from 'src/app/services/rest/group.service'
import { UserService } from 'src/app/services/rest/user.service' import { UserService } from 'src/app/services/rest/user.service'
import { SettingsService } from 'src/app/services/settings.service' import { SettingsService } from 'src/app/services/settings.service'
@@ -44,30 +48,48 @@ export class UsersAndGroupsComponent
unsubscribeNotifier: Subject<any> = new Subject() unsubscribeNotifier: Subject<any> = new Subject()
ngOnInit(): void { public get canViewUsers(): boolean {
this.usersService return this.permissionsService.currentUserCan(
.listAll(null, null, { full_perms: true }) PermissionAction.View,
.pipe(first(), takeUntil(this.unsubscribeNotifier)) PermissionType.User
.subscribe({ )
next: (r) => { }
this.users = r.results
},
error: (e) => {
this.toastService.showError($localize`Error retrieving users`, e)
},
})
this.groupsService public get canViewGroups(): boolean {
.listAll(null, null, { full_perms: true }) return this.permissionsService.currentUserCan(
.pipe(first(), takeUntil(this.unsubscribeNotifier)) PermissionAction.View,
.subscribe({ PermissionType.Group
next: (r) => { )
this.groups = r.results }
},
error: (e) => { ngOnInit(): void {
this.toastService.showError($localize`Error retrieving groups`, e) if (this.canViewUsers) {
}, this.usersService
}) .listAll(null, null, { full_perms: true })
.pipe(first(), takeUntil(this.unsubscribeNotifier))
.subscribe({
next: (r) => {
this.users = r.results
},
error: (e) => {
this.toastService.showError($localize`Error retrieving users`, e)
},
})
}
if (this.canViewGroups) {
this.groupsService
.listAll(null, null, { full_perms: true })
.pipe(first(), takeUntil(this.unsubscribeNotifier))
.subscribe({
next: (r) => {
this.groups = r.results
},
error: (e) => {
this.toastService.showError($localize`Error retrieving groups`, e)
},
})
}
} }
ngOnDestroy() { ngOnDestroy() {