一. 传统权限设计方案
1. 什么是权限
1.1. 概述
1. 有的资源可以直接访问,有的资源需要登录之后才能访问 2. 不同的人登录系统之后,看到的界面是不一样的 3. 即使登录之后,进入界面看到相同的按钮,但是有的人可以点击,有的点不了,即使能点击,也会有限制时间 体现:会员、普通管理员超级管理员等
1.2. 分类:
登录权限:你没有登录,那么有些资源是不能访问 菜单权限:不同的人登录之后,看到的菜单列表个数不一样,或者子菜单也是不一样的 按钮权限/资源权限:相同的按钮,A能点击能访问,B不能点击也不能访问,或者说有限制时间
简单理解:权限就是不同的人,能看到不同菜单,能操作不同的按钮
2. 什么是RBAC
RBAC是基于角色的访问控制【Role-Based Access Control 】,是目前最为广泛接受的权限控制模型。也称之为RBAC权限控制模型
在 RBAC 中,用户通过角色与权限进行关联。多个用户可以是同一个角色,每一个角色拥有若干权限【角色表就是权限的集合表】。系统根据登录用户的角色不同,从而给予不同的系统访问权限,这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便
传统的权限一般分为:
-
登录权限
-
菜单权限
-
按钮权限/资源权限
3. RBAC权限所涉及表结构
t_employee用于登录,t_menu用于显示 1. 为什么要设计中间表? 答:只要是多对多必须是要设计中间表 多对多:不管从任何一方去看关系都是一对多的关系,这样就是多对多 2. 为什么要使用权限表?直接挂菜单不行吗? 要做资源权限 3. 为什么要使用角色表?员工直接挂权限不行吗? 答:可以,但是不会这样做,因为这样做的话 员工与权限的中间表数据量非常庞大【1000个员工,每个员工1000个权限就是1000000条数据】 员工具有高流动性,非常不方便后期的维护【走一个员工,来一个新员工,都需要去维护中间表】 相当于给一批权限取一个别名【角色】 后期维护,只需要增删一条数据即可 角色表就是权限的集合表
4. 权限实现的原理
权限控制的实现方式有很多,例如:shiro, Spring Security等。也可以通过自定义拦截器实现
其中核心包括:
-
当前的资源请求者是谁(当前的登录用户)
-
授权(用户有哪些权限)
-
验证(当前访问的资源是否有权访问)