## 前言
* 动态接口权限为商业版功能,未来即将更新至开源版,大家敬请期待~
## 什么是接口权限
* 接口权限:顾名思义,配置不通角色调用接口的权限。有些敏感接口,是只能有固定的一些角色才能调用,普通角色是不能调用的。这种情况需要有一个明确的系统来控制对应的访问权限
* 接口权限系统,可以控制某些接口只能由固定的角色调用,可以动态控制不同的角色对不同接口的访问权限
## 使用步骤
### 一、注解指定
1. 我们先测试一下上一章节的接口,发现调用返回成功
![](https://box.kancloud.cn/93cbca8258b16c111ab67e6869986755_1636x1622.png)
2. 在接口上使用注解指定只能由user角色调用
![](https://box.kancloud.cn/d87c469939c757c5708d2548aaccfa7f_1786x444.png)
3. 重启工程后,再次调用发现已经返回未授权,因为当前调用的角色为`admin`,与`user`不匹配
![](https://box.kancloud.cn/495a6dc445899fd035373be27508427c_1444x1154.png)
4. 修改授权代码,使`admin`或者`user`其中一个满足要求即可
![](https://box.kancloud.cn/b6f8dcf72a6dfac1ef40a98e30aafaf3_1718x428.png)
5. 重启工程后再次调用发现返回成功
![](https://box.kancloud.cn/9210bd80463375ef841a77bbd6bb12b3_1578x1592.png)
注:注解指定级别最高,直接规定了某些重要的敏感接口只能由固定的角色才能访问。但同时带来但问题是不够灵活,适用于不能被篡改,只能由管理员调用但接口配置。
### 二、web动态配置
1. 打开web,进入`接口权限`模块,点击`权限配置`
![](https://box.kancloud.cn/6f9b38fbf8162fe21ebebfab2d7f0f6e_3352x1662.png)
2. 在弹出的界面点击新增按钮
![](https://box.kancloud.cn/fe3d5093f0acb62b5ec16c93ff2d9856_2772x1496.png)
3. 填好对应的信息并保存(权限编号推荐使用冒号分割)
![](https://box.kancloud.cn/bd6c579ace18470ba6659cd4d681b8b0_1788x860.png)
4. 发现一条配置已经出现
![](https://box.kancloud.cn/c3f613a30a92f9d8df09aa1a6cbc5346_3328x1008.png)
5. 打开角色管理进行接口权限配置
![](https://box.kancloud.cn/7f60b5d7eeda0d6840fe2ac4319e27b4_2306x1402.png)
6. 给后端代码加上注解
![](https://box.kancloud.cn/da8ca2c71adb2adc3772ec270189412b_1778x438.png)
7. 重启工程后访问接口发现返回成功
![](https://box.kancloud.cn/265bd6a67d1aecf51674eb7a26d72118_1472x1498.png)
8. 我们尝试修改下code,然后不用重启,直接调用,发现请求未授权
![](https://box.kancloud.cn/38b492d9dc8e5d2f72fe81d1d4200eba_1788x886.png)
![](https://box.kancloud.cn/e734421da9c759015422ec14094e84b2_970x1140.png)
9. 如此一来我们便可以动态配置接口权限,从而来控制角色能访问的范围
### 三、接口全局匹配
1. 可能看完以上两点,会有小伙伴觉得需要指定到对应到编号、角色才能进行授权。万一有一些不太确定的场景,需要实时变更,这种情况就不满足要求了。
2. 这种情况BladeX也有考虑到,对与这种情况,又结合整体系统的性能,提供了一个类下面的全局匹配功能,具体看如下
3. 在控制器类写上注解(两种皆可,选其一)
![](https://box.kancloud.cn/83ef5f2ee4d724ce69595bdf1846b3e6_1366x326.png)
![](https://box.kancloud.cn/8734e6ca64e0497df2df661d75020ad5_1348x356.png)
4. 重启工程后,访问list接口,发现请求未授权,因为并没有分配对应的接口权限
![](https://box.kancloud.cn/3da8776ad9ea16534da55c12ce1fdf8d_1004x1184.png)
5. 新增接口权限(**权限路径为controller的地址,根据这个匹配,匹配为包含关系。比如设置了/notice/list,那如果匹配到的接口地址是/notice/list/abc或者/abc/notice/list也是能校验通过的**)
![](https://box.kancloud.cn/4730701c8259717396f54f697a9a177f_1730x888.png)
6. 分配角色权限(**这里树形控件有个bug,当父级选中后,子节点默认没有选择,他也会给勾上。已经有人反馈,需要等官方修复,这时候我们再次点击下确定即可**)
![](https://box.kancloud.cn/2d4fc591c925edafe5872358669f40fe_786x802.png)
7. 无需重启工程,再次访问发现接口返回成功
![](https://box.kancloud.cn/b359f2d28e1c1e4ff53681bad213bfde_1400x1604.png)
### 四、结尾语
* 看到这里,相信大家对接口权限有了一个大概对认知,主要代码逻辑为如下两个类
![](https://box.kancloud.cn/fb82a5009a5b03352cb1073df5ffdde5_944x872.png)
* 大家可以进入AuthFun进行拓展@PreAuth的方法,将整个权限打造为自己公司专属的系统
- 第零章 序
- 序言
- 系统架构
- 视频公开课
- 开源版介绍
- 商业版介绍
- 功能对比
- 答疑流程
- 第一章 快速开始
- 升级必看
- 环境要求
- 环境准备
- 基础环境安装
- Docker安装基础服务
- Nacos安装
- Sentinel安装
- 插件安装
- 建数据库
- 工程导入
- 导入Cloud版本
- 导入Nacos配置
- 导入Boot版本
- 工程运行
- 运行Cloud版本
- 运行Boot版本
- 工程测试
- 测试Cloud版本
- 测试Boot版本
- 第二章 技术基础
- Java
- Lambda
- Lambda 受检异常处理
- Stream 简介
- Stream API 一览
- Stream API (上)
- Stream API (下)
- Optional 干掉空指针
- 函数式接口
- 新的日期 API
- Lombok
- SpringMVC
- Swagger
- Mybatis
- Mybatis-Plus
- 开发规范
- 第三章 开发初探
- 新建微服务工程
- 第一个API
- API鉴权
- API响应结果
- Redis缓存
- 第一个CRUD
- 建表
- 建Entity
- 建Service和Mapper
- 新增 API
- 修改 API
- 删除 API
- 查询 API
- 单条数据
- 多条数据
- 分页
- 微服务远程调用
- 声明式服务调用 Feign
- 熔断机制 Hystrix
- 第四章 开发进阶
- 聚合文档
- 鉴权配置
- 跨域处理
- Xss防注入
- 自定义启动器
- Secure安全框架
- Token认证简介
- Token认证配置
- PreAuth注解配置
- Token认证实战
- Token认证加密
- 日志系统
- 原理解析
- 功能调用
- Seata分布式事务
- 简介
- 编译包启动
- 配置nacos对接
- docker启动
- 对接微服务
- 代码生成配置
- 前言
- 数据库建表
- 代码生成
- 前端配置
- 优化效果
- 第五章 功能特性
- SaaS多租户
- 概念
- 系统升级
- 如何使用
- 多终端令牌认证
- 概念
- 系统升级
- 使用
- 第三方系统登录
- 概念说明
- 对接说明
- 对接准备
- 配置说明
- 操作流程
- 后记
- UReport2报表
- 报表简介
- 对接配置
- 报表后记
- 动态数据权限
- 数据权限简介
- 数据权限开发
- 纯注解配置
- Web全自动配置
- 注解半自动配置
- 数据权限注意点
- 动态接口权限
- 乐观锁配置
- 统一服务登陆配置
- Skywalking追踪监控
- Minio分布式对象存储
- Boot版本对接至Cloud
- 第六章 生产部署
- windows部署
- linux部署
- jar部署
- docker部署
- java环境安装
- mysql安装
- docker安装
- docker-compose安装
- harbor安装
- 部署步骤
- 宝塔部署
- 准备工作
- 安装工作
- 部署准备
- 部署后端
- 部署前端
- 部署域名
- 结束工作
- k8s平台部署
- 第七章 版本控制
- Git远程分支合并
- Git地址更换
- 第八章 学习资料
- 第九章 FAQ
- 第十章 联系我们