zoukankan      html  css  js  c++  java
  • 用户、角色、权限管理-设计方案之权限检测

        在管理软件系统设计中,用户、角色、权限管理是不可缺少的三部分,三者具有如下关系:
    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

  • 相关阅读:
    js 数据图表
    yii query builder
    mysql if
    这又是起点
    [cookie篇]从cookie-parser中间件说起
    How to find and fix Bash Shell-shock vulnerability CVE-2014-6271 in unix like system
    AngularJS打印问题
    笔记本上班时间自动静音下班自动打开
    SCP命令
    Installing Ruby 1.9.3 on Ubuntu 12.04 Precise Pengolin (without RVM)
  • 原文地址:https://www.cnblogs.com/wf225/p/1200889.html
Copyright © 2011-2022 走看看