Browse Source

Add support to remove a received access on the access page

pull/7701/head
Thomas Kaul 1 week ago
parent
commit
d631618fe0
  1. 5
      apps/api/src/app/access/access.controller.ts
  2. 12
      apps/client/src/app/components/access-table/access-table.component.html
  3. 5
      apps/client/src/app/components/access-table/access-table.component.ts
  4. 9
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  5. 9
      apps/client/src/app/components/user-account-access/user-account-access.html

5
apps/api/src/app/access/access.controller.ts

@ -117,7 +117,10 @@ export class AccessController {
public async deleteAccess(@Param('id') id: string): Promise<AccessModel> { public async deleteAccess(@Param('id') id: string): Promise<AccessModel> {
const originalAccess = await this.accessService.access({ const originalAccess = await this.accessService.access({
id, id,
userId: this.request.user.id OR: [
{ granteeUserId: this.request.user.id },
{ userId: this.request.user.id }
]
}); });
if (!originalAccess) { if (!originalAccess) {

12
apps/client/src/app/components/access-table/access-table.component.html

@ -61,7 +61,9 @@
class="no-max-width" class="no-max-width"
xPosition="before" xPosition="before"
> >
@if (user()?.settings?.isExperimentalFeatures) { @if (
!isReceivedAccess() && user()?.settings?.isExperimentalFeatures
) {
<button mat-menu-item (click)="onUpdateAccess(element.id)"> <button mat-menu-item (click)="onUpdateAccess(element.id)">
<span class="align-items-center d-flex"> <span class="align-items-center d-flex">
<ion-icon class="mr-2" name="create-outline" /> <ion-icon class="mr-2" name="create-outline" />
@ -78,7 +80,7 @@
</button> </button>
} }
@if ( @if (
user()?.settings?.isExperimentalFeatures || (!isReceivedAccess() && user()?.settings?.isExperimentalFeatures) ||
element.type === 'PUBLIC' element.type === 'PUBLIC'
) { ) {
<hr class="my-0" /> <hr class="my-0" />
@ -86,7 +88,11 @@
<button mat-menu-item (click)="onDeleteAccess(element.id)"> <button mat-menu-item (click)="onDeleteAccess(element.id)">
<span class="align-items-center d-flex"> <span class="align-items-center d-flex">
<ion-icon class="mr-2" name="remove-circle-outline" /> <ion-icon class="mr-2" name="remove-circle-outline" />
<span i18n>Revoke</span> @if (isReceivedAccess()) {
<span i18n>Remove</span>
} @else {
<span i18n>Revoke</span>
}
</span> </span>
</button> </button>
</mat-menu> </mat-menu>

5
apps/client/src/app/components/access-table/access-table.component.ts

@ -52,6 +52,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
}) })
export class GfAccessTableComponent { export class GfAccessTableComponent {
public readonly accesses = input.required<Access[]>(); public readonly accesses = input.required<Access[]>();
public readonly isReceivedAccess = input<boolean>(false);
public readonly showActions = input<boolean>(false); public readonly showActions = input<boolean>(false);
public readonly user = input.required<User>(); public readonly user = input.required<User>();
@ -119,7 +120,9 @@ export class GfAccessTableComponent {
this.accessDeleted.emit(aId); this.accessDeleted.emit(aId);
}, },
confirmType: ConfirmationDialogType.Warn, confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to revoke this granted access?` title: this.isReceivedAccess()
? $localize`Do you really want to remove this received access?`
: $localize`Do you really want to revoke this granted access?`
}); });
} }

9
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -36,7 +36,7 @@ import { addIcons } from 'ionicons';
import { addOutline, eyeOffOutline, eyeOutline } from 'ionicons/icons'; import { addOutline, eyeOffOutline, eyeOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY } from 'rxjs'; import { EMPTY } from 'rxjs';
import { catchError } from 'rxjs/operators'; import { catchError, switchMap } from 'rxjs/operators';
import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component';
import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dialog/interfaces/interfaces'; import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dialog/interfaces/interfaces';
@ -142,7 +142,12 @@ export class GfUserAccountAccessComponent implements OnInit {
protected onDeleteAccess(aId: string) { protected onDeleteAccess(aId: string) {
this.dataService this.dataService
.deleteAccess(aId) .deleteAccess(aId)
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(
switchMap(() => {
return this.userService.get(true);
}),
takeUntilDestroyed(this.destroyRef)
)
.subscribe({ .subscribe({
next: () => { next: () => {
this.update(); this.update();

9
apps/client/src/app/components/user-account-access/user-account-access.html

@ -53,7 +53,14 @@
<div class="container"> <div class="container">
@if (accessesGet.length > 0) { @if (accessesGet.length > 0) {
<h1 class="h3 mb-3 text-center" i18n>Received Access</h1> <h1 class="h3 mb-3 text-center" i18n>Received Access</h1>
<gf-access-table class="mb-5" [accesses]="accessesGet" [user]="user" /> <gf-access-table
class="mb-5"
[accesses]="accessesGet"
[isReceivedAccess]="true"
[showActions]="hasPermissionToDeleteAccess"
[user]="user"
(accessDeleted)="onDeleteAccess($event)"
/>
} }
<h1 class="align-items-center d-flex h3 justify-content-center mb-3"> <h1 class="align-items-center d-flex h3 justify-content-center mb-3">
<span i18n>Granted Access</span> <span i18n>Granted Access</span>

Loading…
Cancel
Save