1 权限控制
1.1 认证和授权
要操作系统的功能必须首先登录到系统才可以,而不同的用户可能拥有不同的权限,这就需要进行授权了。
认证
:系统提供的用于识别用户身份的功能,
通常提供用户名和密码进行登录其实就是在进行认证,
认证的目的是让系统知道你是谁
。
授权
:用户认证成功后,需要为用户授权,其实就是指定当前用户可以操作哪些功能
。
1.2 权限模块数据模型
我们知道了认证和授权的概念,但是要实现最终的权限控制,就需要有一套表结构支撑
- 如下所示:里面有
- 用户表t_user、
- 权限表t_permission、
- 角色表t_role、
- 菜单表t_menu、
- 用户角色关系表t_user_role、
- 角色权限关系表t_role_permission、
- 角色菜单关系表t_role_menu。
- 表间关系为:
这一套表结构对于不同的系统来说,设计的方式基本是一样的,这一套数据库的设计是比较固定的,对权限设计的话
表结构说明:
-
在这7张表中,
角色表起到了至关重要的作用
,其处于核心位置,因为用户、权限、菜单都和角色是多对多关系 -
认证和授权过程中分别会使用到哪些表
认证
过程:只需要用户表
就可以了,在用户登录时可以查询用户表t_user进行校验,判断用户输入的用户名和密码是否正确。授权
过程:用户必须完成认证之后才可以进行授权
,- 首先可以根据
用户查询其角色
, - 再根据
角色查询对应的菜单
,这样就确定了用户能够看到哪些菜单。 - 然后再根据用户的
角色查询对应的权限
,这样就确定了用户拥有哪些权限。 - 所以授权过程会用到上面
7张表
。
- 首先可以根据
2 Spring Security概述
Spring Security是 Spring提供的安全认证服务的框架。
使用Spring Security可以帮助我们来简化认证和授权的过程。
官网:https://spring.io/projects/spring-security
对应的maven坐标:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
常用的权限框架除了Spring Security,还有Apache的shiro框架。这两个都是比较主流的框架