jialiang1012
2016-07-07 01:49
采纳率: 46.7%
浏览 1.3k
已采纳

关于项目权限在数据库中建表的问题

请问下项目经验丰富的大神们在项目中关于权限建表怎么建立,如:现在有个权限表,里面有权限1,权限2,权限3,权限4,分别对应的权限的编号是1,2,3,4,然后现在有个用户表,假设有一个用户拥有2,3,4的权限,我应该怎么创建这个用户表呢,我不可能在用户表里添加权限字段,然后对应的用户给它插入2,3,4然后用逗号隔开吧??应该怎么设计这个表最合理呢??

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • zhangsheng_1992 2016-07-07 06:02
    已采纳

    如果分类比较复杂 你可以再把分类表做一个无限极分类

    我给你个最简单的商品表设计

    goods(商品表)
    id name type_id
    1 宝石 5
    2 礼物a 3

    商品分类表type
    id name pid
    1 珠宝类 0
    2 礼物类 0
    3 生日礼物 2
    4 金银首饰 1
    5 节日礼物 2

    商品分类表的设计你可以搜素下 无限极分类

    上表就是一个多级的无限极分类设计 结构:

    珠宝类
    ------金银首饰
    礼物类
    ------生日礼物
    ------节日礼物

    然后你再商品里面只保存分类id即可

    查询的时候 select * from goods join type where goods.id = 2 结果就是 名称=>礼物a 类型名称=>生日礼物

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • zhangsheng_1992 2016-07-07 02:20

    权限多的话 你可以用rbac的方式 用户表里面存储这个用户的角色即可 这个你可以搜索下rbac 我这就不多讲了

    权限少的话 比如就十几个权限 可以通过位运算的方式 如下:
    首先把权限定义如下
    权限名称 值
    add 1
    select 2
    delete 4
    update 8
    每一个权限的值都是2的次方 第一个是0次方 第二个1次方 以此类推

    比如这个用户有前三个权限 你在用户表里纪录下 前三个值的和 此处值为7 让后保存到用户表里
    查询的时候 比如要看这个用户有没有update权限 update的值为8 你用用户保存值 7&8 得到的是false 证明没有
    而其他3个 7&1 7&2 7&4 分别为 add update delete 都为false

    评论
    解决 无用
    打赏 举报
  • 听楼一夜雨 2016-07-07 02:21

    rbac模式,你这个就像角色表和权限表关系差不多的,加一个中间表存角色id和权限id就行了

    评论
    解决 无用
    打赏 举报
  • zhangsheng_1992 2016-07-07 02:21

    打错了 最后一句 应该是都为true 证明有这个权限

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题