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 };