系统模块权限与用户可访问模块对比及权限状态标记方法
时间:2026-08-17 | 作者:云端旅人 | 阅读:0本文介绍如何基于系统模块定义和用户实际权限,生成一个带布尔标记(1/0)的权限映射对象,实现模块动作级的细粒度权限比对与结构化输出。
本文介绍如何基于系统模块定义和用户实际权限,生成一个带布尔标记(1/0)的权限映射对象,实现模块动作级的细粒度权限比对与结构化输出。
场景说明
做权限管理时,经常会遇到这样一个场景:需要把系统里完整的功能模块(modules)和当前用户实际拿到的操作权限(user_modules)逐个动作对齐比对。
目标是用结构化的方式明确标出每个动作是否被授权。1 代表允许,0 代表禁止。
需要特别留意的是,user_modules 往往只会保存用户已经拥有权限的那部分子集。某些模块或者某些动作本身就可能缺失,所以这套比对逻辑一定要把空值处理考虑周全,不能一碰到缺项就出问题。
实现方案
以下是一个简洁、可复用的解决方案,使用原生 JavaScript 实现:
const modules = {
"member": {
"actions": ["create", "edit"]
},
"subscription": {
"actions": ["create", "edit", "move_out", "renew", "void"]
}
};
const user_modules = {
"subscription": {
"actions": ["create", "edit"]
}
};
const result = Object.fromEntries(
Object.entries(modules).map(([moduleName, moduleDef]) => [
moduleName,
{
...moduleDef,
actions: Object.fromEntries(
moduleDef.actions.map(action => [
action,
(user_modules[moduleName].actions.includes(action) false) 1 : 0
])
)
}
])
);
console.log(result);
// 输出:
// {
// "member": {
// "actions": { "create": 0, "edit": 0 }
// },
// "subscription": {
// "actions": { "create": 1, "edit": 1, "move_out": 0, "renew": 0, "void": 0 }
// }
// }
关键设计说明
- 使用
Object.entries()+Object.fromEntries()实现模块级遍历与重建; - 对每个模块的动作数组,通过
map()转换为[action, flag]键值对数组,再转为对象; - 这样可以确保
actions字段由数组变为键值映射对象,例如"create": 1,符合目标输出格式; - 利用可选链
.和空值合并安全访问user_modules[moduleName].actions,避免因模块缺失导致运行时错误; - 无需预先初始化所有模块的权限,天然兼容
user_modules中未声明的模块,未声明部分会全部标记为0。
注意事项
- 原始数据中
actions是字符串数组,输出中应为对象(非数组),因此不能直接复用原数组结构; - 若后端要求保持数组形式,如
[{"create": 1}, {"edit": 0}],需另行调整序列化逻辑; - 若需支持嵌套权限(如带参数的 action)、动态角色继承或多层级权限校验,建议封装为通用
diffPermissions(modules, userModules)工具函数,并增加类型校验(如 TypeScript 接口); - 在大型应用中,该逻辑宜置于服务端或权限中间件中执行,避免前端暴露完整模块结构。
总结
此方案兼顾可读性、健壮性与扩展性,适用于 RBAC 权限模型下的前端权限渲染或 API 响应组装场景。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17
