ff-admin/src/types/permissionTypes.ts

150 lines
3.5 KiB
TypeScript

export type PermissionSection = "club" | "unit" | "configuration" | "management";
export type PermissionModule =
// club
| "member"
| "calendar"
| "newsletter"
| "protocol"
| "query"
| "listprint"
// unit
| "equipment"
| "equipment_type"
| "vehicle"
| "vehicle_type"
| "wearable"
| "wearable_type"
| "inspection"
| "inspection_plan"
| "respiratory_gear"
| "respiratory_wearer"
| "respiratory_mission"
| "damage_report"
// configuration
| "qualification"
| "award"
| "executive_position"
| "communication_type"
| "membership_status"
| "newsletter_config"
| "salutation"
| "calendar_type"
| "query_store"
| "template"
| "template_usage"
| "backup"
// management
| "user"
| "role"
| "webapi"
| "setting";
export type PermissionType = "read" | "create" | "update" | "delete";
export type PermissionString =
| `${PermissionSection}.${PermissionModule}.${PermissionType}` // für spezifische Berechtigungen
| `${PermissionSection}.${PermissionModule}.*` // für alle Berechtigungen in einem Modul
| `${PermissionSection}.${PermissionType}` // für spezifische Berechtigungen in einem Abschnitt
| `${PermissionSection}.*` // für alle Berechtigungen in einem Abschnitt
| `additional.${string}.${string}` // additional
| "*"; // für Admin
export type PermissionObject = {
[section in PermissionSection]?: {
[module in PermissionModule]?: Array<PermissionType> | "*";
} & { all?: Array<PermissionType> | "*" };
} & {
admin?: boolean;
adminByOwner?: boolean;
} & {
additional?: { [key: string]: string };
};
export type SectionsAndModulesObject = {
[section in PermissionSection]: Array<PermissionModule>;
} & {
additional?: Array<{
key: string;
name: string;
type: "number" | "string";
emptyIfAdmin: boolean;
}>;
};
export const permissionSections: Array<PermissionSection> = ["club", "unit", "configuration", "management"];
export const permissionModules: Array<PermissionModule> = [
// club
"member",
"calendar",
"newsletter",
"protocol",
"query",
"listprint",
// unit
"equipment",
"equipment_type",
"vehicle",
"vehicle_type",
"wearable",
"wearable_type",
"inspection",
"inspection_plan",
"respiratory_gear",
"respiratory_wearer",
"respiratory_mission",
"damage_report",
// configuration
"qualification",
"award",
"executive_position",
"communication_type",
"membership_status",
"newsletter_config",
"salutation",
"calendar_type",
"query_store",
"template",
"template_usage",
"backup",
// management
"user",
"role",
"webapi",
"setting",
];
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
export const sectionsAndModules: SectionsAndModulesObject = {
club: ["member", "calendar", "newsletter", "protocol", "query", "listprint"],
unit: [
"equipment",
"equipment_type",
"vehicle",
"vehicle_type",
"wearable",
"wearable_type",
"inspection",
"inspection_plan",
"respiratory_gear",
"respiratory_wearer",
"respiratory_mission",
"damage_report",
],
configuration: [
"qualification",
"award",
"executive_position",
"communication_type",
"membership_status",
"salutation",
"calendar_type",
"query_store",
"template",
"template_usage",
"newsletter_config",
],
management: ["user", "role", "webapi", "backup", "setting"],
additional: [
//{ key: "val", name: "name", type: "number", emptyIfAdmin: true },
],
};