A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。

版本1:

以购物网为例
1.最常见的授权功能
在用户表里 增加一个字段

如图
0 是会员
1 是管理员

缺点:权限写死,没有良好的维护性,例如 增加 一个商家身份 需要修改后台代码

在登录之后,后台进行权限判断,如果 0 我就是普通用户 跳转到 短信 收发页面
如果 1 我是 管理员 那么 我就跳转到 管理用户的页面
一种是 根据你的身份不同 跳转 不同页面
另一种是 根据的身份不同 显示同一个页面 但是 我C:IF 判断 显示不同的菜单

以上俩种可以混用
这是最简单的 静态的权限


2.动态修改权限

什么是动态的 简单的说 就是我操作人员 能够通过 在web上修改 不对后台代码进行修改操作
能够实现 对某个用户 进行授权操作
人为的 对权限等 进行定制

优点:
1.维护性 (用户就可以,不需要程序猿后台代码修改)
2.实现后台的权限,严格性

原理 根据页面跳转到后台的URL进行判断操作动作
一个模块 一个action,增删改查的命名规范,add***
权限 : 抽象系统中 用户对后台程序的访问 crud
公共部分 具有公共的规范
后台资源的访问都是有共同的规范和特点

把用户在系统中的操作进行一个归类
然后 对于用户能不能进行一个操作 做一个 逻辑的判断



eb613badcbef76095798cbf32fdda3cc7dd99e64.jpg.png (1.98 KB, 下载次数: 55)

eb613badcbef76095798cbf32fdda3cc7dd99e64.jpg.png

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2 赞一个!

查看全部评分

4 个回复

倒序浏览
版本2:
如图http://bbs.itheima.com/forum.php?mod=attachment&aid=MzUzNDF8ODIzOGJlMTFiM2RhMDg0YTQwMDZjMmNmOTA2NTlkOTN8MTcxMzU1Nzg0OA%3D%3D&request=yes&_f=.png
0 无权限
1 有权限

张三对商品模块0010只能查看一个权限,不能进行增删改,而李四对商品模块是1111,具有增删改查的操作。

在页面上,通过选择 或手写 等操作 找到了 这个张三用户,对每一个模块,有4个选项,不选 默认为0 选择了 就是1,对这个客户的每个模块,四个功能进行勾选,我选中后提交 到后台 修改字段 0->1,张三所看到的页面就会多出刚选中的权限对应的操作功能。

对于这个模块 是否允许你的操作 最简单的控制办法就是 菜单按钮 显不显示
http://bbs.itheima.com/forum.php?mod=attachment&aid=MzUzNDJ8MGE5NGFkZTE3OWUwZTllYjcwNGQ5MThhYTJhMGM2NmZ8MTcxMzU1Nzg0OA%3D%3D&request=yes&_f=.png
优点:
1、可以有多个权限身份;
2、已经开始控制每一个用户的每一个模块的权限了,能对具体模块进行增删改查操作权限的制定。
缺点:
1、还是同一张用户表里,数据量大,每次访问消耗资源,浪费时间;
2、若是增加操作,那么在找到用户之后 我还要去找2个字段,一个是模块 一个是 增加,操作不方便。

一个模块至少有16种权限的可能性,增删查改的可能性2*2*2*2=16种

a43c8826cffc1e17229fd15d4b90f603728de9d4.jpg.png (9.17 KB, 下载次数: 98)

a43c8826cffc1e17229fd15d4b90f603728de9d4.jpg.png

2.jpg.png (21.75 KB, 下载次数: 53)

2.jpg.png
回复 使用道具 举报
版本3:

把增删改查进行合并,统称为授权码,顺序人为定义:增删查改

例如:我的某一个模块的权限是 0010 这是只有查看功能的意思http://bbs.itheima.com/forum.php?mod=attachment&aid=MzUzNDN8MDU1Mzk5YWJkMWU3NWU2OWFmZTQ3MTMyM2UxMzkwYjd8MTcxMzU1Nzg0OA%3D%3D&request=yes&_f=.png

授权码用十进制表示,用1个字段表达清楚了 4件事


1^0=1 1^1=0 0^1=1 0^0=0
1| 0=1 1| 1=1 0| 1=1 0| 0=0
1&0=0 1& 1=1 0& 1=0 0&0=0

1)获知权限
例如:
模块B1011 是 没有删除这个操作
现在 我传过来一个授权码码是 1000 我如何判断有没有权限?
1000&1011=1000
你再试试 传过来0010授权码:0010&1011=0010
由上面俩个例子,通过 与运算,得到的是自身,那么说明它有这个增加操作这个权限

传来的二进制和模块的授权码&等于本身,表示有权限滴

2)增加权限
例如:
现在 授权码是1001 我要添加一个权限,变成1011,要怎么增加?
1000 增
0100 删
0010 查
0001 改

1001|0010=1011

3)删除权限
去掉权限:1011^1000=0011

加权限用或,去掉用异或

优点:
2进制 节省空间 节省查询时间 而且计算方便
缺点:
还是在同一张表

3.png (4.76 KB, 下载次数: 53)

3.png

4.png (3.19 KB, 下载次数: 75)

4.png
回复 使用道具 举报
版本4只是把之前版本3的身份抽取出一张表,对一个身份每一个模块是否具有操作功能进行权限的制定,可以通过URL进行判断是否具有该权限                                                                    

4.png (6.72 KB, 下载次数: 63)

4.png

44.png (6.72 KB, 下载次数: 94)

44.png
回复 使用道具 举报
把之前的版本3的用户表抽取出俩张表,一张是单独的用户信息,另一张是身份表,对一个身份具体到某个模块的增删查改,再建立一张中间表,哪个用户拥有哪种身份权限一目了然

5.png (7.1 KB, 下载次数: 65)

5.png

55.png (7.1 KB, 下载次数: 78)

55.png

555.png (7.1 KB, 下载次数: 73)

555.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马