Skip to content
This repository was archived by the owner on Jan 22, 2026. It is now read-only.

Commit 402e860

Browse files
committed
Add ToolAuthorizationGuard
1 parent a17f89b commit 402e860

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { Injectable } from '@angular/core';
2+
import { CanActivate, Router, ActivatedRouteSnapshot } from '@angular/router';
3+
import { ToolAuthorizationService } from './tool-authorization.service';
4+
import { Observable, forkJoin, of } from 'rxjs';
5+
import { map, catchError } from 'rxjs/operators';
6+
// import { Observable, of, merge, forkJoin } from 'rxjs';
7+
// import { map, catchError, tap, filter, take } from 'rxjs/operators';
8+
// import { UserPermissionDataService } from 'components/auth/user-permission-data.service';
9+
// import { NotificationService } from 'components/notification/notification.service';
10+
// import { ProjectService } from './project.service';
11+
12+
export enum ToolAuthorizationTypes {
13+
CREATE,
14+
READ,
15+
WRITE,
16+
ADMIN,
17+
}
18+
19+
@Injectable()
20+
export class ToolAuthorizationGuard implements CanActivate {
21+
static parameters = [Router, ToolAuthorizationService];
22+
constructor(private router: Router, private toolAuthorizationService: ToolAuthorizationService) {}
23+
24+
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
25+
const entityId = route.params.id;
26+
27+
return this.toolAuthorizationService.authorization().pipe(
28+
map(auth => {
29+
if (route.data.authorization === ToolAuthorizationTypes.CREATE) {
30+
return auth.canCreate;
31+
}
32+
return false;
33+
}),
34+
map(authorized => {
35+
this.router.navigate(['/', 'tools']);
36+
return authorized;
37+
}),
38+
catchError(err => {
39+
console.error(err);
40+
return of(false);
41+
})
42+
);
43+
44+
// return forkJoin({
45+
// permissions: this.userPermissionDataService.permissions().pipe(take(1)),
46+
// visibility: this.projectService.getVisibility(entityId),
47+
// }).pipe(
48+
// map(data => data.permissions.canReadEntity(entityId, 'project', data.visibility)),
49+
// tap(canAccess => {
50+
// console.log('CAN ACCESS', canAccess);
51+
// if (!canAccess) {
52+
// this.notificationService.info('You do not have access to this project.');
53+
// }
54+
// return of(canAccess);
55+
// }),
56+
// catchError(err => {
57+
// console.error(err);
58+
// return of(false);
59+
// })
60+
// );
61+
}
62+
}

client/app/tool/tool.module.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { ToolHeaderService } from './tool-header/tool-header.service';
3232
import { EntityThreadComponent } from 'components/entity/entity-thread/entity-thread.component';
3333
import { ToolThreadNewComponent } from './tool-thread-new/tool-thread-new.component';
3434
import { ToolAuthorizationService } from './tool-authorization.service';
35+
import { ToolAuthorizationGuard, ToolAuthorizationTypes } from './tool-authorization-guard.service';
3536

3637
export const ROUTES: Routes = [
3738
{
@@ -42,7 +43,8 @@ export const ROUTES: Routes = [
4243
{
4344
path: 'tools/new',
4445
component: ToolNewComponent,
45-
canActivate: [AuthGuard],
46+
canActivate: [AuthGuard, ToolAuthorizationGuard],
47+
data: { authorization: ToolAuthorizationTypes.CREATE },
4648
},
4749
{
4850
path: 'tools/:id',
@@ -94,6 +96,7 @@ export const ROUTES: Routes = [
9496
ToolService,
9597
ToolDataService,
9698
ToolAuthorizationService,
99+
ToolAuthorizationGuard,
97100
ToolSidenavService,
98101
ToolHeaderService,
99102
],

0 commit comments

Comments
 (0)