• 用户、角色、权限管理-设计方案之权限检测


        在管理软件系统设计中,用户、角色、权限管理是不可缺少的三部分,三者具有如下关系:
    User : Role = 1 : n
    Role : Permission = 1 : n
    如将权限控制到具体的功能模块,又有如下关系:
    Role : Module : Permission = 1 : 1 : n

        UserRole的设计很直观,就是1:n的关系表,User、Role均为主键。下面具体谈谈RolePermission的关系设计。
    RolePermission完全可以采用和UserRole同样的设计,但要求Role、Module、Permission三个主键,此时处理 Role : Module : Permission的 1 : 1 : n 关系,显得有些费劲。针对于所有的功能模块,Permission 均可划分为以下几种:
    1. 列表/查看
    2. 新增
    2. 修改
    4. 删除

        我们可以将“Role : Module : Permission = 1 : 1 : n” 中的“n”想办法变成“1”。设各权限值分别如下(2倍等比递增的关系):
    1. 列表/查看 = 2
    2. 新增 = 4
    2. 修改 = 8
    4. 删除 = 16
    此时的“Role : Module : Permission”中的Permission等于上述四种操作权限中所拥有的权限值之和,比如:若某个(Role + Module)拥有查看、新增、修改、删除的权限,则其Permission=2+4+8+16=30。

        下面进行权限检测,判断“(Role + Module)”所对应的Permission是否包含上述四种操作权限中的每一个。解决问题关键:使用“&”运算符。比如:
    判断Permission是否包含“查看”的权限值,就用 if((Permission & 2) == 2)
    判断Permission是否包含“新增”的权限值,就用 if((Permission & 4) == 4)
    判断Permission是否包含“修改”的权限值,就用 if((Permission & 8) == 8)
    判断Permission是否包含“删除”的权限值,就用 if((Permission & 16) == 16)

        原理(转化为二进制,进行“与”运算):
    30 & 2 = 00011110 & 00000010 = 00000010
    30 & 4 = 00011110 & 00000100 = 00000100
    30 & 8 = 00011110 & 00001000 = 00001000
    30 & 16 = 00011110 & 00010000 = 00010000

  • 相关阅读:
    关于httpd服务的安装、配置
    时间同步ntp服务的安装与配置(作为客户端的配置
    通过挂载系统光盘搭建本地yum仓库的方法
    linux系统的初化始配置(包括网络,主机名,关闭firewalld与selinux)
    Linux下GNOME桌面的安装
    Java面试题汇总
    无敌存储过程分页使用
    正则表达式
    函数
    杂货
  • 原文地址:https://www.cnblogs.com/wf225/p/1200889.html
Copyright © 2020-2023  润新知