mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-11 17:27:54 +02:00
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import type { AppRole } from "@/types/next-auth";
|
|
|
|
export const ROLE_LABELS: Record<AppRole, string> = {
|
|
admin: "Administrateur",
|
|
moderator: "Modérateur",
|
|
editor: "Éditeur",
|
|
member: "Adhérent",
|
|
};
|
|
|
|
export const LABEL_TO_ROLE: Record<string, AppRole> = {
|
|
Administrateur: "admin",
|
|
Modérateur: "moderator",
|
|
Éditeur: "editor",
|
|
Adhérent: "member",
|
|
};
|
|
|
|
type Capability =
|
|
| "viewDashboard"
|
|
| "manageMembers"
|
|
| "moderatePromos"
|
|
| "manageAdmins"
|
|
| "manageCategories"
|
|
| "manageMeetings"
|
|
| "manageEmails"
|
|
| "manageSettings"
|
|
| "memberSpace";
|
|
|
|
const CAPABILITIES: Record<AppRole, Capability[]> = {
|
|
admin: [
|
|
"viewDashboard",
|
|
"manageMembers",
|
|
"moderatePromos",
|
|
"manageAdmins",
|
|
"manageCategories",
|
|
"manageMeetings",
|
|
"manageEmails",
|
|
"manageSettings",
|
|
"memberSpace",
|
|
],
|
|
moderator: ["viewDashboard", "manageMembers", "moderatePromos", "manageMeetings"],
|
|
editor: ["viewDashboard", "manageMembers"],
|
|
member: ["memberSpace"],
|
|
};
|
|
|
|
export function can(role: AppRole | undefined, capability: Capability): boolean {
|
|
if (!role) return false;
|
|
return CAPABILITIES[role]?.includes(capability) ?? false;
|
|
}
|
|
|
|
export const STAFF_ROLES: AppRole[] = ["admin", "moderator", "editor"];
|
|
|
|
export function isStaff(role: AppRole | undefined): boolean {
|
|
return !!role && STAFF_ROLES.includes(role);
|
|
}
|