# 新增自定义角色

新增多维表格高级权限中自定义的角色。

**注意事项**：推荐使用新版[新增自定义角色](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/advanced-permission/base-v2/app-role/create)接口，支持高级权限 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 | POST
接口频率限制 | [10 次/秒](https://open.feishu.cn/document/ukTMukTMukTM/uUzN04SN3QjL1cDN)
支持的应用类型 | Custom App、Store App
权限要求<br>**调用该 API 所需的权限。开启其中任意一项权限即可调用**<br>开启任一权限即可 | 新增自定义角色(base:role:create)<br>查看、评论、编辑和管理多维表格(bitable:app)

### 请求头

名称 | 类型 | 必填 | 描述
---|---|---|---
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)
Content-Type | string | 是 | **固定值**："application/json; charset=utf-8"

### 路径参数

名称 | 类型 | 描述
---|---|---
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"

### 请求体

名称 | 类型 | 必填 | 描述
---|---|---|---
role_name | string | 是 | 自定义角色名称<br>**示例值**："普通用户"
table_roles | app.role.table_role\[\] | 是 | 针对数据表的权限设置<br>**数据校验规则**：<br>- 最大长度：`100`
table_perm | int | 是 | 数据表权限。<br>**提示**：**协作者可编辑自己的记录** 和 **可编辑指定字段** 是 **可编辑记录** 的特殊情况，可通过指定 `rec_rule` 或 `field_perm` 参数实现相同的效果。<br>**示例值**：0<br>**可选值有**：<br>- 0：无权限<br>- 1：仅可阅读<br>- 2：可编辑记录<br>- 4：可编辑字段和记录<br>**默认值**：`0`
table_name | string | 否 | 数据表名称<br>**示例值**："数据表1"
table_id | string | 否 | 多维表格数据表的唯一标识。获取方式：<br>- 你可通过多维表格 URL 获取 `table_id`，下图高亮部分即为当前数据表的 `table_id`<br>- 也可通过[列出数据表](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table/list)接口获取 `table_id`<br>![](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/18741fe2a0d3cafafaf9949b263bb57d_yD1wkOrSju.png?height=746&lazyload=true&maxWidth=700&width=2976)<br>**示例值**："tblKz5D60T4JlfcT"
rec_rule | app.role.table_role.rec_rule | 否 | 记录筛选条件，当 `table_perm` 为 1 或 2 时生效。用于指定可编辑或可阅读的记录。
conditions | app.role.table_role.rec_rule.condition\[\] | 是 | 记录筛选条件，用于指定可编辑或可阅读的记录。<br>**数据校验规则**：<br>- 最大长度：`100`
field_name | string | 是 | 条件字段的名称。记录筛选条件是“创建人包含访问者本人”时，此参数值为 ""。<br>**示例值**："单选"
operator | string | 否 | 条件运算符<br>**示例值**："is"<br>**可选值有**：<br>- is：等于<br>- isNot：不等于<br>- contains：包含<br>- doesNotContain：不包含<br>- isEmpty：为空<br>- isNotEmpty：不为空<br>**默认值**：`is`
value | string\[\] | 否 | 条件的值，可以是单个值或多个值的数组。详情参考[字段目标值（value）填写说明](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table-record/record-filter-guide#3e0fd644)。<br>**示例值**：["optbdVHf4q"]
conjunction | string | 否 | 多个筛选条件的关系<br>**示例值**："and"<br>**可选值有**：<br>- and：与<br>- or：或<br>**默认值**：`and`
other_perm | int | 否 | 其他记录权限，仅当 `table_perm` 为 2 时生效。<br>**示例值**：0<br>**可选值有**：<br>- 0：禁止查看<br>- 1：仅可阅读<br>**默认值**：`0`
field_perm | map&lt;string, int&gt; | 否 | 字段权限，仅在 `table_perm` 为 2 时生效。用于设置字段可编辑或可阅读。类型为 map，key 是字段名称，value 是字段权限。value 枚举值有：<br>- `1`：可阅读<br>- `2`：可编辑<br>**示例值**：{"姓名": 1, "年龄": 2}
allow_add_record | boolean | 否 | 新增记录权限，仅当 `table_perm` 为  2 时生效。用于设置记录是否可以新增。<br>**示例值**：true<br>**默认值**：`true`
allow_delete_record | boolean | 否 | 删除记录权限，仅当 `table_perm` 为  2 时生效。用于设置记录是否可以删除。<br>**示例值**：true<br>**默认值**：`true`
block_roles | app.role.block_role\[\] | 否 | 针对仪表盘的权限设置<br>**数据校验规则**：<br>- 最大长度：`100`
block_id | string | 是 | 多维表格仪表盘的唯一标识，以 blk 开头。获取方式：<br>- 在多维表格的 URL 地址栏中，`block_id` 是下图中高亮部分：<br>![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/a966d15323ee73c66b1e9a31d34ae6c7_x3ctncH2nO.png?height=575&lazyload=true&width=1397)<br>- 通过[列出仪表盘](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-dashboard/list)接口获取<br>**示例值**："blknkqrP3RqUkcAW"
block_perm | int | 是 | 仪表盘的权限<br>**示例值**：0<br>**可选值有**：<br>- 0：无权限<br>- 1：可阅读<br>**默认值**：`0`

### 请求体示例
```json
{
    "role_name": "普通用户",
    "table_roles": [
        {
            "table_perm": 0,
            "table_name": "数据表1",
            "table_id": "tblKz5D60T4JlfcT",
            "rec_rule": {
                "conditions": [
                    {
                        "field_name": "单选",
                        "operator": "is",
                        "value": [
                            "optbdVHf4q"
                        ]
                    }
                ],
                "conjunction": "and",
                "other_perm": 0
            },
            "field_perm": {
                "姓名": 1,
                "年龄": 2
            },
            "allow_add_record": true,
            "allow_delete_record": true
        }
    ],
    "block_roles": [
        {
            "block_id": "blknkqrP3RqUkcAW",
            "block_perm": 0
        }
    ]
}
```

## 响应

### 响应体

名称 | 类型 | 描述
---|---|---
code | int | 错误码，非 0 表示失败
msg | string | 错误描述
data | \- | \-
role | 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：可阅读

### 响应体示例
```json
{
    "data": {
        "role": {
            "role_name": "role1",
            "table_roles": [
                {
                    "table_name": "table1",
                    "table_id": "tblFIgBzKEq75HSE",
                    "table_perm": 2,
                    "addrecords_perm": false,
                    "deleterecords_perm": true,
                    "rec_rule": {
                        "conjunction": "or",
                        "conditions": [
                            {
                                "field_name": "单选",
                                "operator": "is",
                                "field_type": 3,
                                "value": [
                                    "optbdVHf4q"
                                ]
                            },
                            {
                                "value": null,
                                "field_name": "人员",
                                "operator": "contains",
                                "field_type": 11
                            },
                            {
                                "operator": "contains",
                                "field_type": 1003,
                                "value": null,
                                "field_name": ""
                            }
                        ],
                        "other_perm": 0
                    },
                    "field_perm": {
                        "单选": 1,
                        "年龄": 2
                    }
                },
                {
                    "table_name": "table2",
                    "table_id": "tblMPI6OC1aWvTvs",
                    "table_perm": 1,
                    "rec_rule": {
                        "conditions": [
                            {
                                "field_name": "人员",
                                "operator": "contains",
                                "field_type": 11,
                                "value": null
                            },
                            {
                                "operator": "is",
                                "field_type": 4,
                                "value": [
                                    "opttgKOTSt",
                                    "optWcdXR0W"
                                ],
                                "field_name": "多选"
                            }
                        ],
                        "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
                }
            ],
            "role_id": "rolgFH5DO4"
        }
    },
    "code": 0,
    "msg": "success"
}
```

### 错误码

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 | 1255002 | RpcError | 内部错误，请联系[技术支持](https://applink.feishu.cn/TLJpeNdW)
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>- 你也可以在 **多维表格高级权限设置** 中添加用户或一个包含应用的群组，给予这个群自定义的读写等权限。
403 | 1254304 | Only Available For Business and Enterprise Editions | 仅企业版和旗舰版飞书支持行列权限
200 | 1255001 | InternalError | 内部错误，请联系[技术支持](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 | 请求超时，进行重试

