DataEase 数据权限 API:开发自定义权限控制逻辑
在企业级数据可视化场景中,精细化的数据权限控制是保障数据安全的核心能力。DataEase 作为开源数据可视化分析工具,提供了完善的数据权限 API(应用程序接口,Application Programming Interface)体系,支持开发者通过编程方式扩展权限控制逻辑。本文将详细介绍如何基于 DataEase 的权限 API 开发自定义权限规则,实现行级、列级数据访问控制。
权限 API 核心模块架构
DataEase 的权限控制模块采用分层设计,核心 API 集中在 sdk/api/api-permissions 目录下,通过 Maven 坐标 io.dataease:api-permissions 进行管理。该模块提供了用户认证、角色管理、数据权限等完整功能集,其依赖配置可见 sdk/api/api-permissions/pom.xml。
权限 API 主要包含以下子模块:
| 接口文件 | 功能描述 |
|---|---|
| RowPermissionsApi.java | 行级数据权限控制 |
| ColumnPermissionsApi.java | 列级数据权限控制 |
| AuthApi.java | 资源与菜单权限管理 |
| RoleApi.java | 角色权限配置 |
权限控制流程图
行级权限 API 详解
行权限控制允许开发者根据用户角色或属性过滤数据集的特定行记录。核心接口 RowPermissionsApi 提供了完整的 CRUD(创建、读取、更新、删除)操作方法:
关键方法说明
// 查询行权限列表
@Operation(summary = "查询行权限列表")
@GetMapping("/pager/{datasetId}/{goPage}/{pageSize}")
IPage<DataSetRowPermissionsTreeDTO> rowPermissions(
@PathVariable("datasetId") Long datasetId,
@PathVariable("goPage") int goPage,
@PathVariable("pageSize") int pageSize);
// 保存行权限配置
@Operation(summary = "保存")
@PostMapping("save")
void save(@RequestBody DataSetRowPermissionsTreeDTO datasetRowPermissions);
权限配置示例
以下代码演示如何为指定数据集添加行权限过滤规则:
// 创建行权限DTO对象
DataSetRowPermissionsTreeDTO permission = new DataSetRowPermissionsTreeDTO();
permission.setDatasetId(1001L); // 数据集ID
permission.setUserId(2001L); // 用户ID
permission.setFilterRule("region = '华东'"); // 过滤规则
// 调用API保存权限配置
rowPermissionsApi.save(permission);
列级权限 API 应用
列权限控制用于限制用户对特定数据列的访问权限,核心接口 ColumnPermissionsApi 提供列权限的管理功能:
主要接口方法
// 保存列权限配置
@Operation(summary = "保存")
@PostMapping("save")
void save(@RequestBody DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO);
// 删除列权限
@Operation(summary = "删除")
@PostMapping("/delete")
void delete(@RequestBody DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO);
列权限配置示例
// 创建列权限DTO对象
DataSetColumnPermissionsDTO columnPermission = new DataSetColumnPermissionsDTO();
columnPermission.setDatasetId(1001L);
columnPermission.setColumnNames(Arrays.asList("salary", "bonus")); // 限制访问的列
columnPermission.setRoleId(3001L); // 角色ID
// 保存列权限配置
columnPermissionsApi.save(columnPermission);
自定义权限逻辑开发
DataEase 权限 API 支持通过以下两种方式扩展自定义权限逻辑:
1. 扩展权限验证器
通过实现 InteractiveAuthApi 接口的权限校验方法,添加自定义验证逻辑:
@Service
public class CustomAuthService implements InteractiveAuthApi {
@Override
public boolean validatePermission(String resourceId, String action) {
// 自定义权限验证逻辑
if ("SPECIAL_REPORT".equals(resourceId) && "VIEW".equals(action)) {
return checkSpecialPermission();
}
return false;
}
private boolean checkSpecialPermission() {
// 实现具体的权限检查逻辑
return true;
}
}
2. 实现权限拦截器
通过实现 AuthInterceptor 接口,在请求处理过程中动态添加权限过滤条件:
@Component
public class CustomPermissionInterceptor implements AuthInterceptor {
@Override
public void preHandle(HttpServletRequest request, HttpServletResponse response) {
// 获取当前用户角色
String role = getUserRole(request);
// 根据角色动态添加过滤条件
if ("DEPARTMENT_MANAGER".equals(role)) {
addFilterCondition("department = current_department()");
}
}
}
权限 API 调用流程
权限 API 的典型调用流程如下:
- 认证授权:通过
AuthApi获取访问令牌 - 权限配置:调用行/列权限 API 设置权限规则
- 权限验证:通过
InteractiveAuthApi验证权限 - 数据访问:应用权限规则过滤查询结果
完整调用示例可参考 sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/auth/api/InteractiveAuthApi.java 中的权限查询实现。
开发与测试建议
- 依赖管理:确保在项目
pom.xml中正确引入权限 API 模块 - 权限调试:使用
AuthApi中的权限查询方法调试权限配置 - 性能优化:对复杂权限规则添加缓存,减少数据库查询次数
通过合理利用 DataEase 提供的权限 API,开发者可以灵活实现企业级数据安全控制需求,为不同角色和用户提供精细化的数据访问权限管理。
更多权限 API 详细文档可参考 docs/use-cases.md 中的权限管理章节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




