48 lines
1.4 KiB
JavaScript
48 lines
1.4 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) {
|
|
if (!user) return null;
|
|
const memberships = Array.isArray(user.memberships) ? user.memberships : [];
|
|
return 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 membership = activeMembership(user, classId);
|
|
const membershipPermissions = membership && Array.isArray(membership.class_permissions)
|
|
? membership.class_permissions
|
|
: [];
|
|
if (user.role === "teacher") {
|
|
return TEACHER_DEFAULT_PERMISSIONS.has(permission) || membershipPermissions.includes(permission);
|
|
}
|
|
return membershipPermissions.includes(permission);
|
|
}
|
|
|
|
module.exports = {
|
|
hasManagePermission
|
|
};
|