Files
Docker/WebVue/src/hooks/PermissionContext.ts
T
2026-08-25 15:31:16 +08:00

90 lines
2.7 KiB
TypeScript

import { SecurityUserPermissionInfo } from "@/data/auto/securityUserPermissionInfo";
import { LoginProfile } from "@/data/auto/loginProfile";
import { useLoginProfileStore } from "@/store/modules/loginProfile";
import { YesNoPolicy } from "@/data/custom/yesNoPolicy";
export class PermissionContext {
private userPermissons!: SecurityUserPermissionInfo;
constructor(userPermissons: SecurityUserPermissionInfo) {
this.userPermissons = userPermissons ?? new SecurityUserPermissionInfo();
}
canView(permission: string, dataSensitiveId?: string): boolean {
if (dataSensitiveId) {
return (
this.userPermissons.PermissionDependents?.some(
(x) =>
x.PermissionName === permission &&
x.DependentDetailName === dataSensitiveId
) === true
);
}
return (
this.userPermissons.Permissions?.some(
(x) => x.PermissionName === permission
) === true
);
}
canCreate(permission: string, dataSensitiveId?: string): boolean {
if (dataSensitiveId) {
return (
this.userPermissons.PermissionDependents?.some(
(x) =>
x.PermissionName === permission &&
x.DependentDetailName === dataSensitiveId &&
x.CreateIndc == YesNoPolicy.YES
) === true
);
}
return (
this.userPermissons.Permissions?.some(
(x) =>
x.PermissionName === permission && x.CreateIndc == YesNoPolicy.YES
) === true
);
}
canAmend(permission: string, dataSensitiveId?: string): boolean {
if (dataSensitiveId) {
return (
this.userPermissons.PermissionDependents?.some(
(x) =>
x.PermissionName === permission &&
x.DependentDetailName === dataSensitiveId &&
x.AmendIndc == YesNoPolicy.YES
) === true
);
}
return (
this.userPermissons.Permissions?.some(
(x) => x.PermissionName === permission && x.AmendIndc == YesNoPolicy.YES
) === true
);
}
canDelete(permission: string, dataSensitiveId?: string): boolean {
if (dataSensitiveId) {
return (
this.userPermissons.PermissionDependents?.some(
(x) =>
x.PermissionName === permission &&
x.DependentDetailName === dataSensitiveId &&
x.DeleteIndc == YesNoPolicy.YES
) === true
);
}
return (
this.userPermissons.Permissions?.some(
(x) =>
x.PermissionName === permission && x.DeleteIndc == YesNoPolicy.YES
) === true
);
}
}
export function usePermissionContext(): PermissionContext {
const userLoginProfile = useLoginProfileStore();
return new PermissionContext(userLoginProfile.getPermissionInfo()!);
}