权限管理的场景描述

​ 假如为一个服装公司设计一套有服装销售,客户信息采集,人员调动等等功能的智能管理系统。需要很多模块和功能。若此系统主要有库存管理、销售管理、客户管理、行政管理、系统管理等等功能。此表格第一行是权限分类名称和缩写代号。第二行到最后一行是权限名称和编号。

库存管理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页面。如下图所示。

avatar

基于用户和权限的权限管理

​ 由于基于主页的访问方式不灵活,有局限性。所以可以让功能分配的更细一些。有员工表、权限表、员工权限中间表。这种方式基本能实现权限管理。如下图所示。

avatar

​ 这种方式很方便新增用户,比如新增一个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个中间表串联起来。就可以灵活的为某个用户设置某个职位,为某个职位设计某个权限。如图

avatar

​ 此时公司新入职laowang相当仓管人员,只需要在用户角色表中添加 8—>r002