Files
teatea-pension/modules/core/server/permissions.ts

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);
}