src/app/core/permissions/permission-guard/user-role.guard.ts
A guard that checks the roles of the current user against the permissions which are saved in the route data.
Methods |
|
| Protected Async canAccessRoute | ||||||
canAccessRoute(routeData: DynamicComponentConfig)
|
||||||
|
Parameters :
Returns :
Promise<boolean>
|
import { inject, Injectable } from "@angular/core";
import { AbstractPermissionGuard } from "./abstract-permission.guard";
import { DynamicComponentConfig } from "../../config/dynamic-components/dynamic-component-config.interface";
import { SessionSubject } from "../../session/auth/session-info";
/**
* A guard that checks the roles of the current user against the permissions which are saved in the route data.
*/
@Injectable()
export class UserRoleGuard extends AbstractPermissionGuard {
private readonly sessionInfo = inject(SessionSubject);
protected async canAccessRoute(
routeData: DynamicComponentConfig,
): Promise<boolean> {
const permittedRoles = routeData?.permittedUserRoles;
const requiredRoles = routeData?.allRequiredUserRoles ?? [];
const userRoles = this.sessionInfo.value?.roles ?? [];
// No config set => all users are allowed
const hasPermittedRole =
!permittedRoles?.length ||
permittedRoles.some((role) => userRoles.includes(role));
const hasRequiredRoles = requiredRoles.every((role) =>
userRoles.includes(role),
);
return hasPermittedRole && hasRequiredRoles;
}
}