求教“权限管理”的思路,最好是通过“角色”+“权限”来实现的

时间:2022-01-24 16:19:05
如题。。。

在复杂的权限设置面前,直接手写if、else我觉得应该是不行了吧

求教思路

14 个解决方案

#1


在建表的时候就该有权限表,角色的一个属性外键关联这个表

#2


引用 1 楼 bailin710258 的回复:
在建表的时候就该有权限表,角色的一个属性外键关联这个表


可否说的再详细一些呢?主要是 写程序时  应该在哪一个环节来引入这个权限判断 如何引入

#3


以前写过个小项目也是权限问题,我们是这样解决的:当用户登录时就把用户的信息(包括权限,我那时权限用的是数字。假如该用户权限为5)存在session中,当该他要做某个操作时比如删除(权限要求要>6),比较当前权限和要求权限的大小....太遥远了 记不太清楚了

#4


一般身份识别(登录)后就引入角色到session,然后根据角色查表得到权限

#5


表设计:角色关联菜单(一级菜单~二级菜单……),角色关联操作(查看,删除,搜索,修改)

#6


先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...

#7


角色<->权限;权限<->菜单

#8


引用 6 楼 xuzuning 的回复:
先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...


感谢。  关于权限的存储和分配说的非常清楚

那具体在调用时怎么使用呢?

比如现在有一个 删除 按钮

具有删除权限的角色们查看这个页面时可以看到这个按钮, 该怎么写? 用if、else吗?

点击删除按钮后提交到PHP 还需要再次判断权限吗?

#9


条件判断总是必要的,不然如何知道谁是谁?
不过也很简单
$u = 0b1011; //用户权限
$p = 0b0010; //动作号(前面我已经讲了可以有64种动作)
if($p & $u) echo '有权限';

#10


找一下RBAC设计模式

#11


用户表关联用户组表,用户组表关联权限表,当用户进入的时候,先判断属于哪个组,然后根据组设定权限,很多开源产品都这么设计的。

#12


简单的的  角色储存好每个方法, 使用这个方法时 判断这个用户角色是否有这个方法权限

#13


RBAC权限模式就可以  这些网上一大堆,自己可以查查

#14


顶帖收藏~~

#1


在建表的时候就该有权限表,角色的一个属性外键关联这个表

#2


引用 1 楼 bailin710258 的回复:
在建表的时候就该有权限表,角色的一个属性外键关联这个表


可否说的再详细一些呢?主要是 写程序时  应该在哪一个环节来引入这个权限判断 如何引入

#3


以前写过个小项目也是权限问题,我们是这样解决的:当用户登录时就把用户的信息(包括权限,我那时权限用的是数字。假如该用户权限为5)存在session中,当该他要做某个操作时比如删除(权限要求要>6),比较当前权限和要求权限的大小....太遥远了 记不太清楚了

#4


一般身份识别(登录)后就引入角色到session,然后根据角色查表得到权限

#5


表设计:角色关联菜单(一级菜单~二级菜单……),角色关联操作(查看,删除,搜索,修改)

#6


先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...

#7


角色<->权限;权限<->菜单

#8


引用 6 楼 xuzuning 的回复:
先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...


感谢。  关于权限的存储和分配说的非常清楚

那具体在调用时怎么使用呢?

比如现在有一个 删除 按钮

具有删除权限的角色们查看这个页面时可以看到这个按钮, 该怎么写? 用if、else吗?

点击删除按钮后提交到PHP 还需要再次判断权限吗?

#9


条件判断总是必要的,不然如何知道谁是谁?
不过也很简单
$u = 0b1011; //用户权限
$p = 0b0010; //动作号(前面我已经讲了可以有64种动作)
if($p & $u) echo '有权限';

#10


找一下RBAC设计模式

#11


用户表关联用户组表,用户组表关联权限表,当用户进入的时候,先判断属于哪个组,然后根据组设定权限,很多开源产品都这么设计的。

#12


简单的的  角色储存好每个方法, 使用这个方法时 判断这个用户角色是否有这个方法权限

#13


RBAC权限模式就可以  这些网上一大堆,自己可以查查

#14


顶帖收藏~~