export interface PermissionTopic { topic: string; list: string[]; } export const permissions = [ { topic: "Manage Corporate", list: [ "viewCorporate", "editCorporate", "deleteCorporate", "createCodeCorporate", ], }, { topic: "Manage Admin", list: ["viewAdmin", "editAdmin", "deleteAdmin", "createCodeAdmin"], }, { topic: "Manage Student", list: ["viewStudent", "editStudent", "deleteStudent", "createCodeStudent"], }, { topic: "Manage Teacher", list: ["viewTeacher", "editTeacher", "deleteTeacher", "createCodeTeacher"], }, { topic: "Manage Country Manager", list: [ "viewCountryManager", "editCountryManager", "deleteCountryManager", "createCodeCountryManager", ], }, { topic: "Manage Exams", list: [ "createReadingExam", "createListeningExam", "createWritingExam", "createSpeakingExam", "createLevelExam", ], }, { topic: "View Pages", list: [ "viewExams", "viewExercises", "viewRecords", "viewStats", "viewTickets", "viewPaymentRecords", ], }, { topic: "Manage Group", list: ["viewGroup", "editGroup", "deleteGroup", "createGroup"], }, { topic: "Manage Codes", list: ["viewCodes", "deleteCodes", "createCodes"], }, { topic: "Others", list: ["all"], }, ] as const; const permissionsList = [ ...new Set( permissions.reduce( (accm: string[], permission) => [...accm, ...permission.list], [] ) ), ]; export type PermissionType = (typeof permissionsList)[keyof typeof permissionsList]; export interface Permission { id: string; type: PermissionType; topic: string; users: string[]; }