1-Shiro框架学习之权限设计
权限管理的场景描述
假如为一个服装公司设计一套有服装销售,客户信息采集,人员调动等等功能的智能管理系统。需要很多模块和功能。若此系统主要有库存管理、销售管理、客户管理、行政管理、系统管理等等功能。此表格第一行是权限分类名称和缩写代号。第二行到最后一行是权限名称和编号。
库存管理c | 销售管理x | 客户管理k | 行政管理z | 系统管理s |
---|---|---|---|---|
入库 1001 | 新增订单1005 | 新增客户1009 | 卫生1013 | 员工管理1015 |
出库 1002 | 取消订单1006 | 查询客户1010 | 开关门1014 | 权限分配1016 |
查询 1003 | 订单查询1007 | 修改客户1011 | ||
修改 1004 | 修改订单1008 | 删除客户1012 | ||
现在有张三、李四分别是公司的销售人员和仓管人员,他们的职责如下表
姓名 | 职业 | 权限 |
---|---|---|
张三 | 销售 | 1003、1005~~~~1012 |
李四 | 仓管 | 1001~~~~1004、1005、1009 |
此时ta们要进入公司的一体化管理系统,由于ta们职位不同,所以看到的菜单也不一样。这个系统登录需要账号密码,怎么通过账号来判断该员工是什么职位呢?创建一个用户表存储员工的信息并加上职位id。
staff_id | staff_name | staff_password | position |
---|---|---|---|
1 | zhangsan | 123456 | 1(销售) |
2 | lisi | 444444 | 2(仓管) |
每次新来一个员工就在上方表格里增加一行数据。每个员工登录时系统会判断ta的职位position,登录后就可以看到不同菜单和按钮。
基于主页的权限管理系统
这种是基于主页的权限管理系统(不同的用户看到不同的主页),但是这种权限管理不方便想要动态增加某个员工新功能,如果职位position很多就要写很多html页面。如下图所示。
基于用户和权限的权限管理
由于基于主页的访问方式不灵活,有局限性。所以可以让功能分配的更细一些。有员工表、权限表、员工权限中间表。这种方式基本能实现权限管理。如下图所示。
![]() |
这种方式很方便新增用户,比如新增一个user-id=3,叫王五的hr。他属于行政管理。只需要在权限表中添加
权限id | 权限代号 mark | 描述description |
---|---|---|
1015 | sys:z:cleanUp | 做卫生 |
1016 | sys:z:door | 开关门 |
然后在用户权限表中添加3–>1015;3–>1016。若叫liucheng的用户要增加开关门的权限就可以再用户权限表中添加1—>1014。若有个叫tangsan的销售新人加入公司user_id=4。则要在用户权限表里添加4—>1003,4—>1005~~~~1012。又要增加一些重复的数据。如果公司有100个销售人员那种用户权限表中的重复数据越来越多。其中权限id不变,变化的是user_id。
RBAC(Role Base Access Control):基于角色的权限控制
上面的建表方式可行但是不灵活。需要在用户表和权限表中增加一个角色表(职位表)。这样就有3个单独的表。再加上用户-角色表;角色-权限表这2个中间表串联起来。就可以灵活的为某个用户设置某个职位,为某个职位设计某个权限。如图
![]() |
此时公司新入职laowang相当仓管人员,只需要在用户角色表中添加 8—>r002