/** * 权限码常量(规范 §98-99 前端权限不能代替后端权限) * * 前端隐藏按钮只是用户体验,真正权限由后端校验。 * 即使用户手动访问 URL,无权限仍拒绝。 * 用户端小程序本身权限较少,主要场景:是否可发消息、是否可申请红娘、是否可报名活动。 */ // 用户端功能权限码(用于前端按钮显隐与路由守卫) exports.USER_PERMISSION = { CAN_VIEW_DISCOVER: 'can_view_discover', // 进入找对象 CAN_RECEIVE_RECOMMENDATIONS: 'can_receive_recommendations', // 被系统推荐 CAN_LIKE: 'can_like', // 表达喜欢 CAN_CHAT: 'can_chat', // 发起聊天(需 mutual_match) CAN_APPLY_ACTIVITY: 'can_apply_activity', // 报名活动 CAN_APPLY_MATCHMAKER: 'can_apply_matchmaker', // 申请红娘 CAN_REPORT: 'can_report', // 提交举报 CAN_VIEW_SENSITIVE_OWN: 'can_view_sensitive_own', // 查看本人敏感字段 }; // 后台/红娘端权限码(预留,规范 §93、§97) // 后台路由绑定 permissionCode,按 currentOperator.permissions 动态生成菜单 exports.ADMIN_PERMISSION = { // 用户与审核 USER_VIEW: 'user.view', USER_REVIEW: 'user.review', USER_SENSITIVE_VIEW: 'user.sensitive.view', USER_BAN: 'user.ban', // 匹配 MATCH_RULE_EDIT: 'match.rule.edit', // 红娘 MATCHMAKER_SERVICE: 'matchmaker.service', MATCHMAKER_ASSIGN: 'matchmaker.assign', // 活动 ACTIVITY_VIEW: 'activity.view', ACTIVITY_CREATE: 'activity.create', ACTIVITY_EDIT: 'activity.edit', ACTIVITY_REVIEW: 'activity.review', ACTIVITY_CHECKIN: 'activity.checkin', // 风控 RISK_REPORT_VIEW: 'risk.report.view', RISK_REPORT_PROCESS: 'risk.report.process', // 组织与权限 ORG_MANAGE: 'org.manage', ROLE_MANAGE: 'role.manage', OPERATOR_MANAGE: 'operator.manage', // 系统 ANALYTICS_VIEW: 'analytics.view', SETTING_MANAGE: 'setting.manage', }; /** * 判断当前权限列表是否包含指定权限码 * @param {string[]} permissions 当前用户/操作员权限列表 * @param {string} code 权限码 * @returns {boolean} */ exports.hasPermission = (permissions, code) => { if (!Array.isArray(permissions) || !code) return false; return permissions.indexOf(code) >= 0; }; /** * 判断当前权限列表是否包含任意一个权限码 * @param {string[]} permissions * @param {string[]} codes * @returns {boolean} */ exports.hasAnyPermission = (permissions, codes) => { if (!Array.isArray(permissions) || !Array.isArray(codes)) return false; return codes.some((c) => permissions.indexOf(c) >= 0); };