权限实现是web应用项目永远绕不开的话题,诸如SpringSecurity、Shiro等安全框架也提供了相对健全的解决方案。但如果摒弃这些框架单从功能实现出发实现多账户多角色的权限分管其实思路也很简单。
思路分析
后端实现(接口资源管理)
针对后端开发,基于springboot,我们可以采用拦截器与自定义注解配合实现 面向用户的 后台接口资源的管理。在用户登录时,将该账户可用的接口资源路径以某种形式存放在缓存中,当接口请求发起时,拦截器解析该账户所拥有的接口资源路径并与请求体路径相比对。这样,只需管理好用户与后台接口资源路径的对应关系在一定意义上就实现了针对用户的能力(即后台权限)的管理。
当然,针对后台接口资源实现面向用户的分管并不是非拦截器不可,同样的道理,我们采用AOP或过滤器实现 理论上也是可行的,总体思路都是在请求访问时做鉴权回应。后面我们会着重针对拦截器实现和AOP实现 两种实现方式做代码分析。
前端实现(组件资源可见/可操作)
针对前端开发,思路上可以通过解析用户的权限资源(这里要求后端有权限相关的库表设计)来对前端组件的可见性/可操作性进行管控。这部分不是本篇论述的重点,点到为止,不做赘述。
基于拦截器实现后端资源权限管理
以下代码在springboot中实现。用户登录的信息(授权接口资源等)缓存(session或自定义cookie)的编写这里不做介绍,各位可以按自己的思路实现,只要能够在请求体中解析即可。
- 配置拦截器
import cn.wayne.util.ReqInterceptor;
import org.springframework.beans.factory.annotation.Aut