资源权限策略(Resource Policy)
网关前缀:${API_BASE}/metadata/resource-policies/...
资源权限策略(Resource Policy)用于为资源(实体/视图/指标)配置访问控制策略,支持:
- 对象级(Object-level):谁能对资源执行哪些动作
- 列级(Column-level):字段可见性/脱敏规则
- 行级(Row-level):行过滤谓词(RLS)
后端入口:ResourcePolicyController(/api/v1/resource-policies)。
ResourceType
resourceType 取值(来自后端枚举 ResourcePolicy.ResourceType):
entity:数据实体view:视图metric:指标
DTO(ResourcePolicyDto)
请求/响应体主要字段:
id:策略ID(返回时)resourceType:entity | view | metric,必填resourceId:资源ID,必填resourceName:资源名(冗余字段,便于展示)description:描述objectLevelPolicy:JSON 字符串columnLevelPolicy:JSON 字符串rowLevelPolicy:JSON 字符串isActive:是否启用(默认 true)priority:优先级(数字越小优先级越高)tenantId:租户ID(由服务端写入/返回)
创建资源策略
- POST
/resource-policies - 权限:
tenant:admin/admin - 请求头:
Authorization: Bearer <token>
示例(对象级 + 列级 + 行级):
curl -X POST \
"${API_BASE}/metadata/resource-policies" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"resourceType": "entity",
"resourceId": "en_xxx",
"resourceName": "orders",
"description": "Orders access policy",
"priority": 100,
"isActive": true,
"objectLevelPolicy": "{\"admin\":[\"read\",\"write\"],\"user\":[\"read\"]}",
"columnLevelPolicy": "{\"user\":{\"allowedColumns\":[\"id\",\"order_date\",\"total_amount\"],\"maskingRules\":{\"customer_email\":{\"type\":\"PARTIAL_MASK\"}}}}",
"rowLevelPolicy": "{\"user\":{\"predicates\":[{\"field\":\"tenant_id\",\"op\":\"eq\",\"value\":\"${user.tenant_id}\"}]}}"
}'
更新 / 删除 / 查询
- PUT
/resource-policies/{id}:更新策略(tenant:admin/admin) - DELETE
/resource-policies/{id}:删除策略(tenant:admin/admin) - GET
/resource-policies/{id}:按 ID 查询(tenant:admin/admin)
按资源查询
- GET
/resource-policies/resource/{resourceType}/{resourceId}(tenant:admin/admin)
示例:
curl -X GET \
"${API_BASE}/metadata/resource-policies/resource/entity/en_xxx" \
-H "Authorization: Bearer <token>"
分页查询 / 按类型分页 / 搜索
- GET
/resource-policies?page=1&size=20&sortBy=priority&sortDirection=asc - GET
/resource-policies/by-type/{resourceType}?page=0&size=20&sortBy=priority&sortDirection=asc - GET
/resource-policies/search?keyword=order&page=1&size=20&sortBy=priority&sortDirection=asc
Principal 权限矩阵(管理员)
- GET
/resource-policies/principal-permissions?resourceType=<type>&action=<action>&userName=<userName>&page=1&size=20 - 权限:
admin - 说明:用于查看某用户在特定资源类型上的权限矩阵(用于排查权限)
内部接口:获取某资源的所有生效策略
- GET
/resource-policies/internal/active/{resourceType}/{resourceId} - 权限:
tenant:admin/admin - 请求头:
X-Tenant-Id: <tenantId> - 说明:内部 API,供其他服务读取生效策略(返回单个
ResourcePolicyDto或null)