You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带角色前缀的权限对象合并为后端所需的角色权限结构?

权限格式转换解决方案

需求说明

需要将前端传入的如下格式对象:

{
    'User.permissions.user.view.dashboard': true,
    'Admin.permissions.user.view.dashboard': true,
    'Admin.permissions.admin.view.dashboard': true,
}

转换为后端所需的、以角色名为键、对应权限字符串数组为值的格式:

{
    'User': [
        'permissions.user.view.dashboard'
    ],
    'Admin': [
        'permissions.user.view.dashboard',
        'permissions.admin.view.dashboard'
    ]
}

当前问题

你当前使用map方法得到了分散的对象数组,但无法合并为目标格式:

const data = JSON.parse(req.body)
const permissions = Object.keys(data).map((key) => {
    const permParts = key.split('.')
    
    return {[permParts[0]]: permParts.slice(1).join('.')}
})
console.log(permissions);

输出:

[
  { User: 'permissions.user.view.dashboard' },
  { Admin: 'permissions.admin.view.dashboard' },
  { Admin: 'permissions.user.view.dashboard' }
]

解决代码

改用reduce方法直接累积生成目标对象,替代map:

const data = JSON.parse(req.body);
const permissions = Object.keys(data).reduce((acc, key) => {
    const [role, ...permParts] = key.split('.');
    const permission = permParts.join('.');
    
    // 如果角色不存在,初始化空数组
    if (!acc[role]) {
        acc[role] = [];
    }
    // 将权限添加到对应角色的数组中
    acc[role].push(permission);
    
    return acc;
}, {}); // 初始值为空对象

console.log(permissions);

代码说明

  1. 使用reduce遍历所有键,acc作为累积的目标对象,初始值为空对象{}
  2. 通过解构拆分键的第一部分为角色名称,剩余部分拼接为完整权限字符串
  3. 检查累积对象中是否已有该角色的数组,没有则创建空数组
  4. 将权限字符串推入对应角色的数组,最终返回累积对象,得到目标格式

内容的提问来源于stack exchange,提问作者Ernestas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:51:12