求教“权限管理”的思路,最好是通过“角色”+“权限”来实现的
在复杂的权限设置面前,直接手写if、else我觉得应该是不行了吧
求教思路
回复讨论(解决方案)
在建表的时候就该有权限表,角色的一个属性外键关联这个表
在建表的时候就该有权限表,角色的一个属性外键关联这个表
可否说的再详细一些呢?主要是 写程序时 应该在哪一个环节来引入这个权限判断 如何引入
以前写过个小项目也是权限问题,我们是这样解决的:当用户登录时就把用户的信息(包括权限,我那时权限用的是数字。假如该用户权限为5)存在session中,当该他要做某个操作时比如删除(权限要求要>6),比较当前权限和要求权限的大小....太遥远了 记不太清楚了
一般身份识别(登录)后就引入角色到session,然后根据角色查表得到权限
表设计:角色关联菜单(一级菜单~二级菜单……),角色关联操作(查看,删除,搜索,修改)
先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)
每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字
综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...
角色权限;权限菜单
先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)
每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字
综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...
感谢。 关于权限的存储和分配说的非常清楚
那具体在调用时怎么使用呢?
比如现在有一个 删除 按钮
具有删除权限的角色们查看这个页面时可以看到这个按钮, 该怎么写? 用if、else吗?
点击删除按钮后提交到PHP 还需要再次判断权限吗?
条件判断总是必要的,不然如何知道谁是谁?
不过也很简单
$u = 0b1011; //用户权限
$p = 0b0010; //动作号(前面我已经讲了可以有64种动作)
if($p & $u) echo '有权限';
找一下RBAC设计模式
用户表关联用户组表,用户组表关联权限表,当用户进入的时候,先判断属于哪个组,然后根据组设定权限,很多开源产品都这么设计的。
简单的的 角色储存好每个方法, 使用这个方法时 判断这个用户角色是否有这个方法权限
RBAC权限模式就可以 这些网上一大堆,自己可以查查
上一篇: equals和hashcode