import { NavigationGuard } from 'vue-router'; import type { AdminSections, AuditorSections, CrmSections, CrudAction, SupervisorSections, WtApplication, WtObject, } from '../../../../enums'; import type { CrudGlobalAction, ScopeClass, SpecialGlobalAction, WebitelLicense, } from '../enums'; import type { ApplicationsAccessSchema } from '../classes/ApplicationsAccess'; /** * @description * Represents union of all Webitel web client applications/sections * */ export type UiSection = | AdminSections | AuditorSections | SupervisorSections | CrmSections; export type FullUiSectionName = `${WtApplication}/${UiSection}`; /** * @internal * @description Received from backend * */ export type GlobalAction = CrudGlobalAction | SpecialGlobalAction; /** * @internal * */ export interface GlobalAccessApiResponseItem { id: GlobalAction; name: string; usage: string; } /** * @internal * */ export interface ScopeAccessApiResponseItem { class: ScopeClass; access: string; } /** * @internal * @description * Represents admin->permissions->roles->access. * */ export type VisibilityAccess = ApplicationsAccessSchema; /** * @internal * @description * Represents raw access data, received from backend. * */ export interface CreateUserAccessStoreRawAccess { permissions: GlobalAccessApiResponseItem[]; scope: ScopeAccessApiResponseItem[]; access: VisibilityAccess; license: WebitelLicenseInfo[]; } /** * @internal */ export interface CreateUserAccessStoreConfig { /** * @default 'userinfo' * */ namespace?: string; } /** * @description * Map is used for quick access to user permissions * */ export type GlobalActionAccessMap = Map< CrudAction | SpecialGlobalAction, boolean >; /** * @description * Map is used for quick access to user permissions * */ export type ScopeAccessMap = Map>; /** * @description * Map is used for quick access to user permissions * */ export type AppVisibilityMap = Map; /** * @description * Map is used for quick access to user permissions * */ export type SectionVisibilityMap = Map; export interface UserAccessStore { initialize: (CreateUserAccessStoreRawAccess) => void; hasReadAccess: (object?: WtObject) => boolean; hasCreateAccess: (object?: WtObject) => boolean; hasUpdateAccess: (object?: WtObject) => boolean; hasDeleteAccess: (object?: WtObject) => boolean; routeAccessGuard: NavigationGuard; hasSpecialGlobalActionAccess: (id: SpecialGlobalAction) => boolean; hasGlobalCrudActionAccess: (action: CrudAction) => boolean; hasLicense: (license: WebitelLicense) => boolean; hasApplicationVisibility: (app: WtApplication) => boolean; hasSectionVisibility: ({ section: UiSection, object: WtObject, app: WtApplication, }) => boolean; /** * @internal * for pinia devtools debug */ globalAccess: GlobalActionAccessMap; /** * @internal * for pinia devtools debug */ scopeAccess: ScopeAccessMap; /** * @internal * for pinia devtools debug */ appVisibilityAccess: AppVisibilityMap; /** * @internal * for pinia devtools debug */ sectionVisibilityAccess: SectionVisibilityMap; /** * @internal * for pinia devtools debug */ licenseAccess: LicenseAccessMap; } export type WebitelLicenseInfo = { prod: WebitelLicense; scope: ScopeClass[]; id: string; expiresAt: string; // timestamp issuedAt: string; // timestamp }; export type LicenseAccessMap = Map;