src/app/core/permissions/permission-guard/user-role.guard.ts

Description

A guard that checks the roles of the current user against the permissions which are saved in the route data.

Extends

AbstractPermissionGuard

Relationships

Index

Methods

Methods

Protected Async canAccessRoute
canAccessRoute(routeData: DynamicComponentConfig)
Parameters :
Name Type Optional
routeData DynamicComponentConfig No
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;
  }
}

results matching ""

    No results matching ""