当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

酷酷杰伦

拥有积分:16
这家伙太懒,还没有签名!

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

OA项目中一点关于权限管理算法的笔记

酷酷杰伦 发表于 2年前 (2014-11-26 20:40:48)  |  评论(1)  |  阅读次数(3504)| 0 人收藏此文章,   我要收藏   
摘要 真的只是一点笔记,关于算法的笔记。写下来希望在面试的时候可以跟面试官装X,

在设计OA项目中的权限管理模块时可能出现下面的情况:

一个用户可能有多个权限,一个角色也可能有多种权限,而权限又有很多,概括一下有最基本的:增、删、查、改,在权限模块中设计一种算法,这个算法可以实现以下三点(使用二进制的思想一位代表一种状态)二进制转换成整数后就代表了这个用户或者角色所具有的权限:

C代表增  R代表查 U代表更新 D代表删除

1、获取 C R U D 中的某一种操作是否有权限:

2、设置C R U D 某一种操作有权限

3、设置C R U D 某一种操作没有权限

具体实现如下:

假设现在有一种状态是1001对应的CRUD如下:符合二进制书写习惯同时为了方便扩展(向左扩展)

D U R   C

1 0 0 1 

表示对DC有权限,对UR没权限

d u r c

1、获取C操作的权限

理解:不管C所在这一位是0还是1要得到当前这一位的值,思路是不管其他三位(置为0)将这一位与1进行与运算即可得到当前所在这一位的值

1 0 0 1

& 0 0 0 1

0  0 0 1

获取到了C所在的这一位是1表示对C操作有权限

2、设置R操作有权限:

理解:不管R所在的这一位是0还是1都要将R所在的这一位变为1同样不管其他三位(置为0其他位与0进行或运算还会保持原来状态不变因此不会影响其他位,将这一位与1进行或运算即可将这一位变为1

D U R C

1 0 0 1

| 0 0 1 0

1 0 1 1

R状态为由原来的0变为了1,表示对R具有了权限

3、设置C操作无权限

理解:不管C操作当前所在的这一位是0还是1都要将这一位变为0同样不管其他三位(置为1注意为了不影响其他位要设置为1因为不管0还是11进行与操作都是保持原来的值不变,将这一位与0进行与操作

D U R C

1 0 0 1

& 1 1 1 0

1 0 0 0

C状态位有原来的1变为了表示对C的权限被取消

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183