43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
const MODULE_MANAGE_PERMISSIONS = {
|
|
announcements: "announcement_manage",
|
|
schedule: "schedule_manage",
|
|
resources: "resource_manage",
|
|
fund: "fund_manage",
|
|
timeline: "timeline_manage",
|
|
votes: "vote_manage",
|
|
reading_corner: "reading_corner_manage"
|
|
};
|
|
|
|
const TEACHER_DEFAULT_PERMISSIONS = new Set([
|
|
"member_view",
|
|
"member_manage",
|
|
"committee_manage",
|
|
"announcement_manage",
|
|
"timeline_manage",
|
|
"vote_manage",
|
|
"schedule_manage",
|
|
"resource_manage",
|
|
"reading_corner_manage",
|
|
"assignment_manage",
|
|
"module_manage"
|
|
]);
|
|
|
|
function activeMembership(user, classId) {
|
|
return user?.memberships?.find((item) => item.class_id === classId) || user?.active_membership || null;
|
|
}
|
|
|
|
function hasManagePermission(user, classId, moduleKey) {
|
|
const permission = MODULE_MANAGE_PERMISSIONS[moduleKey];
|
|
if (!permission || !user) return false;
|
|
if (user.role === "super_admin") return true;
|
|
const membershipPermissions = activeMembership(user, classId)?.class_permissions || [];
|
|
if (user.role === "teacher") {
|
|
return TEACHER_DEFAULT_PERMISSIONS.has(permission) || membershipPermissions.includes(permission);
|
|
}
|
|
return membershipPermissions.includes(permission);
|
|
}
|
|
|
|
module.exports = {
|
|
hasManagePermission
|
|
};
|