权限管理的设计

目录
  1. ✔1、 数据库的设计
  2. ✔2、 权限控制处理
  3. ✔3、性能优化
  4. ✔4、 如何接入

一个成熟的管理后台必须要有相应的权限控制进行访问限制,今天我就简单说一下我的一个权限控制的设计~

1、 数据库的设计

一般来说,有一定规模的管理系统要上管理权限的设计,就必须把权限和权限分配相关的内容存到数据库,小系统的话,存放在配置文件也是可以,但是系统一旦大了就难以维护,所以权限管理还是得存放在数据库里面。 涉及的表一般有:

  • 资源表(T_AUTH_RESOURCE)
  • 用户表(T_AUTH_USER)
  • 角色表(T_AUTH_ROLE)
  • 角色与资源关联表(T_AUTH_ROLE_RESOURCE)
  • 用户与角色关联表(T_AUTH_GRANT)

数据库表关系如下: 资源表存储相关的资源的CRUD的url资源。用户表存储用户信息。角色表存储权限的角色。角色与资源关联表存储相关角色与相关资源的关联。 用户与角色关联表存储用户与相关角色的关联。

表结构如下:

2、 权限控制处理

权限控制一般有两种方法,过滤器(Filter)过滤请求, 拦截器(Interceptor)拦截请求。

  1. 过滤器处理,在用户请求时,首先会先进入过滤器链,执行每一个过滤器的doFilter方法。我们可以在doFilter方法里面获取用户请求的url以及相关的请求参数,然后从上下文获取用户信息进行权限控制的业务逻辑处理。 过滤器执行流程图

  2. 拦截器处理,拦截器是spring mvc框架的一个特性,具体的流程看下图。我们可以在拦截器的提前处理的方法里面进行权限控制的处理。 拦截器流程图

  3. 我们将采用过滤器进行过滤处理,理由是过滤器处理比较简单,并且不用依赖于框架。

3、性能优化

由于用户的请求都要经过过滤器或者拦截器的处理,每一次的处理都具有一定的时间和资源(查数据库等)的开销,所以如果请求量非常大的话,这时权限控制必然是系统的一个瓶颈。现在要做的优化工作主要还是上缓存。上缓存主要有两个级别的缓存。

  • 全局的缓存——也就是redis缓存,把权限信息放在redis里面。加快查询速度。
  • 会话级别的缓存——也就是同一个用户在登录期间对权限进行缓存,加快权限处理速度。

4、 如何接入

因为权限控制处理这一块都是比较基础共通的,为了方便其他应用的快速方便地接入,接入只需要要做如下工作就行:

  • 在数据库,创建好相关的表(我这边提供表结构)。
  • 配置一下我实现好的Filter。
  • 在数据库里面预先插入相关的资源和角色还有默认系统管理员。 完成上面操作就可以了。