60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import type { Permission, RoleDefinition, RoleId } from "@/modules/core/types";
|
|
import { ROLE_LABELS } from "@/modules/core/types";
|
|
|
|
export const ROLE_DEFINITIONS: RoleDefinition[] = [
|
|
{
|
|
id: "admin",
|
|
label: ROLE_LABELS.admin,
|
|
description: "管理账号、权限、审计日志与全部业务数据。",
|
|
permissions: [
|
|
"account:read",
|
|
"account:manage",
|
|
"audit:read",
|
|
"elder:read",
|
|
"elder:create",
|
|
"elder:update",
|
|
"elder:delete",
|
|
],
|
|
},
|
|
{
|
|
id: "manager",
|
|
label: ROLE_LABELS.manager,
|
|
description: "处理运营业务,可查看账号与审计日志,不管理账号角色。",
|
|
permissions: ["account:read", "audit:read", "elder:read", "elder:create", "elder:update", "elder:delete"],
|
|
},
|
|
{
|
|
id: "caregiver",
|
|
label: ROLE_LABELS.caregiver,
|
|
description: "查看老人档案并维护照护相关信息。",
|
|
permissions: ["elder:read", "elder:update"],
|
|
},
|
|
{
|
|
id: "viewer",
|
|
label: ROLE_LABELS.viewer,
|
|
description: "只读查看老人档案。",
|
|
permissions: ["elder:read"],
|
|
},
|
|
];
|
|
|
|
export function getRoleDefinition(role: RoleId): RoleDefinition {
|
|
const roleDefinition = ROLE_DEFINITIONS.find((item) => item.id === role);
|
|
if (roleDefinition) {
|
|
return roleDefinition;
|
|
}
|
|
|
|
return {
|
|
id: "viewer",
|
|
label: ROLE_LABELS.viewer,
|
|
description: "只读查看老人档案。",
|
|
permissions: ["elder:read"],
|
|
};
|
|
}
|
|
|
|
export function getPermissionsForRole(role: RoleId): Permission[] {
|
|
return [...getRoleDefinition(role).permissions];
|
|
}
|
|
|
|
export function hasPermission(role: RoleId, permission: Permission): boolean {
|
|
return getRoleDefinition(role).permissions.includes(permission);
|
|
}
|