权限(PermissionController)¶
提供 KMS 知识管理模块「权限域」的能力:按资源 Id 查询当前用户对该资源拥有的操作权限位掩码。所有端点均返回统一 Resource 封装。
- 接口类型:REST 资源(
@RestController,类级与方法级produces = MediaType.APPLICATION_JSON_VALUE) - 基址:
${myapps.context-path.kms:}/api/kms - Tag:kms权限模块
公共说明¶
- 鉴权(据源码
KmsMvcConfig+KmsSecurityFilter):KmsMvcConfig注册全局 Servlet 过滤器KmsSecurityFilter(URL 模式/*,context-path 为/时为/kms/*)。本控制器路径/api/kms/fileobjects/{fileObjectId}/permissions不在KmsSecurityFilter.isExcludeURI的豁免名单内(豁免仅覆盖/login.*、/admin、/domain.*、/tray/service、/authtime、service/OfficeServer、.*outsideshare/.*/preview、静态资源后缀、actuator/health等),亦不匹配 S3 数据面前缀。过滤器调用Security.getUserIdFromToken(request),取不到用户则返回 HTTP401(无响应体)。因此所有端点均需 accessToken,可通过以下任一方式传递:query 参数accessToken、query 参数access_token(移动端)、请求头accessToken、CookieaccessToken、请求头Authorization: Bearer <token>。完整鉴权机制见 index.md「鉴权说明」。 - 执行用户:控制器内
getUser()(继承自AbstractBaseController)调用Security.getUserIdFromToken(request)还原当前用户 id,再经 Feign(UserAPI.getUserById)装载KmsUser。无userCode参数。 - 响应结构:统一
Resource(见 ../index.md「统一响应结构」),字段为errcode/errmsg/data/errors。KMS 的Resource为AbstractBaseController内部类,其构造器对data执行ESAPI.encode(data)做 XSS 编码,故data中的 HTML 特殊字符会被转义。 - HTTP 状态码与错误码(据源码
AbstractBaseController全局异常处理):成功 HTTP 200;InvalidRequestException(如fileObjectId为空)→ HTTP 400 / errcode=400;UnauthorizedException→ HTTP 403 / errcode=403;ForbiddenException→ HTTP 403 / errcode=403;ResourceNotFoundException→ HTTP 404 / errcode=404;其他Exception→ HTTP 500 / errcode=500。 - 权限位掩码:返回值
operations为整数,按二进制位组合表示当前用户拥有的操作权限集合(跟随kms_authorization表operations字段的按位与逻辑,与GrantOperation各CODE_*常量按位或对应)。 - 路径变量:
fileObjectId为 KMS 内部主键(明文 id,文件/文件夹 Id),非 DES 加密密文。
1. 根据资源 Id 获取当前用户对资源的权限¶
按资源 Id(文件/文件夹 Id)查询当前用户对该资源拥有的操作权限位掩码。fileObjectId 为空或全空白时抛 InvalidRequestException(HTTP 400)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/fileobjects/{fileObjectId}/permissions(完整:{kms-context}/api/kms/fileobjects/{fileObjectId}/permissions) - 鉴权:是(需 accessToken,据源码)
- Tag:kms权限模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| fileObjectId | path | string | 是 | 资源Id(文件/文件夹 Id),不可为空或空白 |
请求示例¶
响应¶
结构:统一 Resource。
data:Map<String, Object>,结构 { "fileObjectId": "<资源Id>", "operations": <int 位掩码> }。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": { "fileObjectId": "__FILEOBJECTID__", "operations": 7 },
"errors": null
}
失败示例(参数为空):