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

如何将权限字符串数组转换为紧凑唯一整数?

权限数组转紧凑唯一整数的高效方案

核心思路:先给权限分配唯一标识,再编码为紧凑整数

方案1:字典映射+位掩码(改进版)

  • 第一步:给每个权限字符串分配唯一整数ID,比如维护一张permission_defs表:
    | id  | permission          |
    |-----|---------------------|
    | 1   | role.users.view     |
    | 2   | role.users.manage   |
    | 3   | role.users.delete   |
    
    ID可以用自增序列,也可以按权限层级编码(比如role=1、users=2、view=1 → 1*1000+2*100+1=1201,兼顾可读性)。
  • 第二步:将用户的权限ID集合转为位掩码整数。比如用户拥有ID1、3,对应二进制101,转十进制为5。若权限数量超过64个,直接用数据库支持的任意精度整数类型(如PostgreSQL的NUMERIC、MySQL的DECIMAL)存储,这类类型能存超长整数,且体积远小于字符串数组。
  • 优势:编码解码速度极快,权限校验直接用位运算(mask & (1 << id)) != 0完成,性能最优。

方案2:字典映射+可变长度整数编码

如果觉得位掩码的大整数仍不够紧凑,可采用此方案:

  • 第一步:同样给权限分配唯一ID,将用户的权限ID按从小到大排序。
  • 第二步:对排序后的ID做差值编码(如ID序列[1,3,5],差值为[1,2,2]),再用可变长度编码(如Varint)打包成字节流,最后转成十进制整数(或把字节流转十六进制再转十进制)。
  • 优势:用户权限数量较少时,编码后的整数比位掩码更短,存储更紧凑。

方案3:完美哈希映射

若不想维护权限ID字典,可使用完美哈希函数给每个权限字符串生成唯一整数:

  • 提前针对所有权限设计无冲突的哈希算法(如多项式哈希),直接将权限字符串转为唯一整数,再把用户的权限整数集合用位掩码或上述编码方式转成单个大整数。
  • 优势:无需维护ID字典,直接操作字符串;缺点是新增权限时需重新验证哈希无冲突。

关键注意事项

  • 编码解码逻辑需保持一致,比如排序规则、ID分配规则不能随意修改。
  • 若权限会频繁新增,优先选择自增ID的字典映射方案,扩展性最佳。
  • 数据库存储时优先选用支持任意精度整数的类型,避免溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:25:24