基于角色的权限管理设计小技巧

原理:二进制数的与、或、异或等特性,类似linux系统的文件权限管理
权限对照
读权限(r) 22 4
写权限(w) 21 2
可执行权限(x) 20 1
增加权限
文件权限 7 4|2|1
文件权限 6 4|2
文件权限 5 4|1

减少权限
原始权限为7
文件权限 6 7^1
文件权限 5 7^2
文件权限 4 7^2^1

建表语句
CREATE TABLE `rbac_center_node` (
  
`id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '节点id',
 
 `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '节点状态(0:禁用 1:启用)',
  
`level` tinyint(1) unsigned NOT NULL COMMENT '节点等级(0:最高节点 1:一级节点 2:二级节点)',
  
`pid` smallint(5) NOT NULL COMMENT '父节点 (0:所有一级节点的父节点)',
  
`power` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '节点权限',
  
`show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否显示(0:隐藏 1:显示)',
  
`sort` tinyint(2) unsigned NOT NULL COMMENT '节点排序',
 
 `node_name` varchar(32) NOT NULL COMMENT '节点文件地址',
  
`node_title` varchar(32) NOT NULL COMMENT '节点标题(简体中文)',
  
PRIMARY KEY (`id`),
  UNIQUE KEY `node_name` (`node_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8



角色赋权SQL语句
"update `rbac_{$serverType}_node` set `power`=`power`|".$power." where `id` in(".$roleInfo['node'].") and `power`&".$power."=0";
角色去权SQL语句
update `rbac_{$serverType}_node` set `power`=`power`^".$power." where `power`&".$power."=".$power
角色认证权限SQL语句
select `id`,`node_name` as `name`,`{$title}` as `title`,`show` from `rbac_{$serverType}_node` where `level`=1 and `status`=1 and `pid`=0 and `power` & ".$rolePower."=".$rolePower." order by `sort` asc

猜你喜欢

转载自hao3721.iteye.com/blog/1756280