# 列出自定义角色

列出多维表格高级权限中用户自定义的角色。

**注意事项**：推荐使用新版[列出自定义角色](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/advanced-permission/base-v2/app-role/list)接口，支持高级权限 2.0 版本新增的权限点位，包括更精细的行级别权限控制、多维表格的复制、导出点位的控制等。

## 前提条件

要调用自定义角色相关接口，你需确保多维表格已开启高级权限。你可通过[更新多维表格元数据](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app/update)接口开启高级权限。

## 请求

基本 | &nbsp;
---|---
HTTP URL | https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/roles
HTTP Method | GET
接口频率限制 | [20 次/秒](https://open.feishu.cn/document/ukTMukTMukTM/uUzN04SN3QjL1cDN)
支持的应用类型 | Custom App、Store App
权限要求<br>**调用该 API 所需的权限。开启其中任意一项权限即可调用**<br>开启任一权限即可 | 列出自定义角色(base:role:read)<br>查看、评论、编辑和管理多维表格(bitable:app)<br>查看、评论和导出多维表格(bitable:app:readonly)

### 请求头

名称 | 类型 | 必填 | 描述
---|---|---|---
Authorization | string | 是 | `tenant_access_token`<br>或<br>`user_access_token`<br>**值格式**："Bearer `access_token`"<br>**示例值**："Bearer u-7f1bcd13fc57d46bac21793a18e560"<br>[了解更多：如何选择与获取 access token](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-choose-which-type-of-token-to-use)

### 路径参数

名称 | 类型 | 描述
---|---|---
app_token | string | 多维表格 App 的唯一标识。不同形态的多维表格，其 `app_token` 的获取方式不同：<br>- 如果多维表格的 URL 以 ==**feishu.cn/base**== 开头，该多维表格的 `app_token` 是下图高亮部分：<br>![app_token.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/6916f8cfac4045ba6585b90e3afdfb0a_GxbfkJHZBa.png?height=766&lazyload=true&width=3004)<br>- 如果多维表格的 URL 以 ==**feishu.cn/wiki**== 开头，你需调用知识库相关[获取知识空间节点信息](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/wiki-v2/space/get_node)接口获取多维表格的 app_token。当 `obj_type` 的值为 `bitable` 时，`obj_token` 字段的值才是多维表格的 `app_token`。<br>了解更多，参考[多维表格 app_token 获取方式](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/bitable-overview#-752212c)。<br>**示例值**："appbcbWCzen6D8dezhoCH2RpMAh"

### 查询参数

名称 | 类型 | 必填 | 描述
---|---|---|---
page_size | int | 否 | 分页大小<br>**示例值**：10<br>**数据校验规则**：<br>- 最大值：`30`
page_token | string | 否 | 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取查询结果<br>**示例值**：eVQrYzJBNDNONlk4VFZBZVlSdzlKdFJ4bVVHVExENDNKVHoxaVdiVnViQT0

## 响应

### 响应体

名称 | 类型 | 描述
---|---|---
code | int | 错误码，非 0 表示失败
msg | string | 错误描述
data | \- | \-
items | app.role\[\] | 自定义角色列表
role_name | string | 自定义角色名称
role_id | string | 自定义角色 ID
table_roles | app.role.table_role\[\] | 针对数据表的权限设置
table_perm | int | 数据表权限。<br>**提示**：**协作者可编辑自己的记录** 和 **可编辑指定字段** 是 **可编辑记录** 的特殊情况，可通过指定 `rec_rule` 或 `field_perm` 参数实现相同的效果。<br>**可选值有**：<br>- 0：无权限<br>- 1：可阅读<br>- 2：可编辑记录<br>- 4：可编辑字段和记录
table_name | string | 数据表名称
table_id | string | 数据表 ID。详情参考[数据表 table](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/bitable-overview#8ff3bb0b)。
rec_rule | app.role.table_role.rec_rule | 可编辑或可阅读的记录。当 `table_perm` 为 1 或 2 时生效。
conditions | app.role.table_role.rec_rule.condition\[\] | 记录筛选条件，用于指定可编辑或可阅读的记录。
field_name | string | 条件字段的名称。记录筛选条件是“创建人包含访问者本人”时，此参数值为 ""。
operator | string | 条件运算符<br>**可选值有**：<br>- is：等于<br>- isNot：不等于<br>- contains：包含<br>- doesNotContain：不包含<br>- isEmpty：为空<br>- isNotEmpty：不为空
value | string\[\] | 条件的值，可以是单个值或多个值的数组。详情参考[字段目标值（value）填写说明](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table-record/record-filter-guide#3e0fd644)。
field_type | int | 字段类型。枚举参考[字段类型 type](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table-field/guide#46001acf)。
conjunction | string | 多个筛选条件的关系<br>**可选值有**：<br>- and：与<br>- or：或
other_perm | int | 其他记录权限，仅在 `table_perm` 为 2 时生效。<br>**可选值有**：<br>- 0：禁止查看<br>- 1：仅可阅读
field_perm | map&lt;string, int&gt; | 字段权限，仅在 `table_perm` 为 2 时生效。用于设置字段可编辑或可阅读。类型为 map，key 是字段名称，value 是字段权限。value 枚举值有：<br>- `1`：可阅读<br>- `2`：可编辑
allow_add_record | boolean | 新增记录权限，仅在 `table_perm` 为 2 时生效，用于设置记录是否可以新增。
allow_delete_record | boolean | 删除记录权限，仅在 `table_perm` 为 2 时生效，用于设置记录是否可以删除。
block_roles | app.role.block_role\[\] | 针对仪表盘的权限设置
block_id | string | 仪表盘的 ID。详情参考[仪表盘 block](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/bitable-overview#7a17ee60)。
block_type | string | 仪表盘的类型<br>**可选值有**：<br>- dashboard：仪表盘
block_perm | int | 仪表盘的权限<br>**可选值有**：<br>- 0：无权限<br>- 1：可阅读
page_token | string | 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
has_more | boolean | 是否还有更多项
total | int | 总数

### 响应体示例
```json
{
    "code": 0,
    "msg": "success",
    "data": {
        "items": [
            {
                "role_id": "rola66uIZT",
                "role_name": "role1",
                "table_roles": [
                    {
                        "table_name": "table1",
                        "table_id": "tblFIgBzKEq75HSE",
                        "table_perm": 2,
                        "allow_add_record": false,
                        "allow_delete_record": true,
                        "rec_rule": {
                            "conjunction": "or",
                            "conditions": [
                                {
                                    "field_name": "单选",
                                    "field_type": 3,
                                    "operator": "is",
                                    "value": [
                                        "optbdVHf4q"
                                    ]
                                },
                                {
                                    "field_name": "人员", // 人员 包含 访问者本人
                                    "field_type": 11,
                                    "operator": "contains",
                                    "value": null
                                },
                                {
                                    "field_name": "", // 创建人 包含 访问者本人
                                    "field_type": 1003,
                                    "operator": "contains",
                                    "value": null
                                }
                            ],
                            "other_perm": 0
                        },
                        "field_perm": {
                            "单选": 1,
                            "年龄": 2
                        }
                    },
                    {
                        "table_name": "table2",
                        "table_id": "tblMPI6OC1aWvTvs",
                        "table_perm": 1,
                        "rec_rule": {
                            "conditions": [
                                {
                                    "field_name": "人员",
                                    "field_type": 11,
                                    "operator": "contains",
                                    "value": null
                                },
                                {
                                    "field_name": "多选",
                                    "field_type": 4,
                                    "operator": "is",
                                    "value": [
                                        "opttgKOTSt",
                                        "optWcdXR0W"
                                    ]
                                }
                            ],
                            "other_perm": 0,
                            "conjunction": "and"
                        }
                    },
                    {
                        "table_name": "table3",
                        "table_id": "tblmkLF7Tg6IWbRb",
                        "table_perm": 0
                    },
                    {
                        "table_name": "table4",
                        "table_id": "tbl5VQHDTms19Qe7",
                        "table_perm": 4
                    }
                ],
                "block_roles": [
                    {
                        "block_id": "blknkqrP3RqUkcAW",
                        "block_type": "dashboard",
                        "block_perm": 0
                    },
                    {
                        "block_id": "blkAjxjWKvbBi7EA",
                        "block_type": "dashboard",
                        "block_perm": 1
                    }
                ]
            }
        ],
        "page_token": "rola66uIZT",
        "has_more": false,
        "total": 1
    }
}
```

### 错误码

HTTP状态码 | 错误码 | 描述 | 排查建议
---|---|---|---
200 | 1254000 | WrongRequestJson | 请求体错误
200 | 1254001 | WrongRequestBody | 请求体错误
200 | 1254002 | Fail | 导致报 1254002 错误码的场景较多，请参考以下建议排查：<br>- 如果单次操作的内容变更较大，请尝试在单次操作中减少数据量<br>- 如果你并发调用了接口，请尝试控制请求间隔，稍后重试<br>- 如果在知识库（wiki）中创建多维表格，请检查你是否使用了知识库[创建知识空间节点](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/wiki-v2/space-node/create)接口创建多维表格。在此场景下不能使用[创建多维表格](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app/create)接口<br>- 请检查接口参数是否有误。例如，在分页查询多维表格时，传递了无效的 page_token，或传递了错误的数据表的 table_id<br>- 如果该报错偶尔发生，可能是服务器超时或不稳定，请重试解决
200 | 1254003 | WrongBaseToken | app_token 错误。app_token 是多维表格 App 的唯一标识。不同形态的多维表格，其 `app_token` 的获取方式不同：<br>- 如果多维表格的 URL 以 ==**feishu.cn/base**== 开头，该多维表格的 `app_token` 是下图高亮部分：<br>![app_token.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/6916f8cfac4045ba6585b90e3afdfb0a_GxbfkJHZBa.png?height=766&lazyload=true&width=3004)<br>- 如果多维表格的 URL 以 ==**feishu.cn/wiki**== 开头，你需调用知识库相关[获取知识空间节点信息](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/wiki-v2/space/get_node)接口获取多维表格的 app_token。当 `obj_type` 的值为 `bitable` 时，`obj_token` 字段的值才是多维表格的 `app_token`。<br>了解更多，参考[多维表格 app_token 获取方式](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/bitable-overview#-752212c)。
200 | 1254010 | ReqConvError | 请求错误
400 | 1254032 | InvalidRoleName | 自定义角色名无效
400 | 1254033 | RoleNameDuplicated | 自定义角色名重复
400 | 1254036 | Base is copying, please try again later. | 复制多维表格为异步操作，该错误码表示当前多维表格仍在复制中，在复制期间无法操作当前多维表格。需要等待复制完成后再操作
200 | 1254040 | BaseTokenNotFound | app_token 不存在。app_token 是多维表格 App 的唯一标识。不同形态的多维表格，其 `app_token` 的获取方式不同：<br>- 如果多维表格的 URL 以 ==**feishu.cn/base**== 开头，该多维表格的 `app_token` 是下图高亮部分：<br>![app_token.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/6916f8cfac4045ba6585b90e3afdfb0a_GxbfkJHZBa.png?height=766&lazyload=true&width=3004)<br>- 如果多维表格的 URL 以 ==**feishu.cn/wiki**== 开头，你需调用知识库相关[获取知识空间节点信息](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/wiki-v2/space/get_node)接口获取多维表格的 app_token。当 `obj_type` 的值为 `bitable` 时，`obj_token` 字段的值才是多维表格的 `app_token`。<br>了解更多，参考[多维表格 app_token 获取方式](https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/bitable-overview#-752212c)。
404 | 1254047 | RoleIdNotFound | role_id 不存在。role_id 是多维表格高级权限中自定义角色的唯一标识，以 `rol` 开头。可通过[列出自定义角色](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-role/list)接口获取。
400 | 1254110 | RoleExceedLimit | 自定义角色数量超限，限制 30 条
200 | 1254290 | TooManyRequest | 请求过快，稍后重试
200 | 1254291 | Write conflict | 在同一个数据表中，并发调用了读写接口或请求过快，出现冲突。请参考以下建议解决：<br>- 确保没有并发调用多维表格读写相关接口<br>- 若操作量较大，建议在接口与接口之间增加 0.5 或 1 秒的延迟，也可在报错中增加重试逻辑，确保业务的稳定性<br>- 对于写接口，可以将接口中的查询参数 `ignore_consistency_check` 设置为 true，表示在读写操作时，暂时忽略一致性检查，以提高性能
400 | 1254301 | OperationTypeError | 多维表格未开启高级权限或不支持开启高级权限
403 | 1254302 | Permission denied. | 调用身份缺少多维表格的高级权限。你需给予调用身份数据表的 **可管理** 权限或多维表格的 **可管理** 等权限，再重新调用。具体步骤如下所示：<br>- 对用户授予高级权限，你可在 **多维表格高级权限设置** 中添加用户，为用户开通足够权限；或在多维表格页面右上方 **分享** 入口为当前用户添加可管理权限。详情参考飞书帮助中心文档[使用多维表格高级权限](https://www.feishu.cn/hc/zh-CN/articles/588604550568-%E4%BD%BF%E7%94%A8%E5%A4%9A%E7%BB%B4%E8%A1%A8%E6%A0%BC%E9%AB%98%E7%BA%A7%E6%9D%83%E9%99%90)。<br>![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/df3911b4f747d75914f35a46962d667d_dAsfLjv3QC.png?height=546&lazyload=true&maxWidth=550)<br>- 对应用授予高级权限，你需通过多维表格页面右上方 **「...」** -> **「...更多」** ->**「添加文档应用」** 入口为应用添加可管理权限。<br>![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/22c027f63c540592d3ca8f41d48bb107_CSas7OYJBR.png?height=1994&lazyload=true&maxWidth=550&width=3278)<br>![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/9f3353931fafeea16a39f0eb887db175_0tjzC9P3zU.png?height=728&lazyload=true&maxWidth=550&width=890)<br>**注意**：<br>在 **添加文档应用** 前，你需确保目标应用至少开通了一个多维表格的 [API 权限](https://open.feishu.cn/document/ukTMukTMukTM/uYTM5UjL2ETO14iNxkTN/scope-list)。否则你将无法在文档应用窗口搜索到目标应用。    <br>- 你也可以在 **多维表格高级权限设置** 中添加用户或一个包含应用的群组，给予这个群自定义的读写等权限。
200 | 1255001 | InternalError | 内部错误，请联系[技术支持](https://applink.feishu.cn/TLJpeNdW)
200 | 1255002 | RpcError | 内部错误，请联系[技术支持](https://applink.feishu.cn/TLJpeNdW)
200 | 1255003 | MarshalError | 序列化错误，请联系[技术支持](https://applink.feishu.cn/TLJpeNdW)
200 | 1255004 | UmMarshalError | 反序列化错误，请联系[技术支持](https://applink.feishu.cn/TLJpeNdW)
504 | 1255040 | Request timed out, please try again later | 请求超时，进行重试

