权限管理算法

本文介绍了如何使用二进制位运算和数据结构实现权限管理算法。通过用户组表、权限表和角色表的数据,阐述了如何将权限转化为二进制数,并进行或运算来确定用户的最终权限。例如,用户登录时,系统获取角色权限和,再考虑继承的权限,进行位运算后存储在session中。通过位运算判断用户是否具备特定操作的权限,如增加或修改Project等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设表中有以下数据:

用户组表:
iGUID
vGroup_Name
1
Egenera



权限表:
iPID
iPermission_Bit
vPermission_Name
1
0
增加RoadMap
2
1
修改RoadMap
3
2
删除RoadMap
4
3
增加Project
5
4
修改Project
备注:iPermission_Bit的数字范围为0~31之间,且不能重复

现在我们用1个long型的数据结构来存放权限之和,1个long型有32位,1位对应一种权限操作,那么它可以表示32种操作,故上面的权限表中最多只能32条记录。

假设Administrator拥有以上5种操作:那么它对应的权限之和的二进制就是:
00000000 00000000 00000000 00011111
化成十进制就是:1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 +1*2^0 =31

假设PM拥有”增加Project”和”修改Project”,那么它的权限和是: 1*2^4 + 1*2^3 =24

假设User什么权限都没有,那就为0了

角色表:
iRoleID
vRole_Name
iPermissions
1
Administrator
31
2
PM
24
3
User
0
用户表:
iUID
vUser_Name
iGUID
iRoleID
InherUID
1
张三
1
1

		
2
李四
1
2


3
王五
1
2


4
小明
1
2
2
5
小强
1
3


用户登录系统时,系统首先从数据库取出该用户所属角色的权限和Sum,再判断该用户是否继承了其他用户,若有继承其他用户A,再取出A的权限和Sum2,Sum 跟 Sum2 进行或运算后,结果作为该用户的权限和保存在session中。


假如小强想要增加Project,那么系统首先对小强所拥有的权限进行判断。
表中的记录说明小强没有 增加project的权限



假如李四要增加Project。系统对李四的权限判断是这样进行的:”增加Project”操作对应的是第3位,系统首先判断李四所属角色的权限和二进制数的第3位是否为1。这个可以通过位的与运算来实现。 
李四所属角色的权限和为24  。 只要 23 & 24==23 ,就表示李四有”增加Project”的操作。
OK,李四成功地增加了Project,名字为BBB
因为Project BBB是由李四创建的。


Project表:
iProjectID
vProject_Name
iUID
1
AAA
1
2
BBB
2
3
CCC
3
假如其他用户要修改Project呢?
1、张三属于系统管理员,他的角色比李四大,故可以修改Project BBB。
2、王五不可以修改Project BBB,因为王五跟李四同属一个角色。且创建该Project的iUID不等于王五自身的iUID和继承来的InherUID。
3、小明可以修改Project BBB,因为小明继续了李四的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值