Agent权限配置
前言:为什么权限管理如此重要?
随着Agent在企业的应用场景不断拓展,一个关键问题浮出水面: 如何在开放便捷与安全可控之间找到完美平衡点?
想象一下,如果你开发的企业Agent能够:
- 精准授权 - 为每位用户量身定制可访问的Agent或技能范围
- 数据分级 - 识别用户身份,仅展示其权限范围内的业务数据
- 个性化体验 - 根据部门、职级、角色提供动态化的Agent能力
- 无缝集成 - 可在钉钉/飞书/企微等Agent交互入口集成这些功能
这一切,都可以通过我们强大而灵活的权限管理系统实现,从而让一个Agent被不同人使用时,展示出不同的任务处理能力!
BetterYeah平台不仅提供了平台级的开发者权限管理,更打造了直观易用、与企业权限中心结合的 Agent使用者权限控制功能 。通过与钉钉/飞书等交互平台的无缝对接,我们让"千人千面"的智能体验成为现实,在释放AI潜能的同时,为企业数据安全构筑坚不可摧的堡垒。
一、权限管理架构
概述
BetterYeah平台除了平台开发者的基础权限管控之外,还可以通过企业的权限映射来管控使用者在使用Agent的访问权限,精确控制用户对Agent技能资源的访问范围,包括子Agent、知识库、工作流、插件、数据库等核心资源。
核心流程:
(1)身份识别 :当用户尝试通过钉钉机器人\飞书机器人等来访问Agent时,平台会自动捕获用户身份信息
(2) 权限查询 :平台通过预先配置的权限回调接口,向你的企业权限中心发送身份验证请求
(3) 权限映射 :企业权限中心返回该用户可访问的具体资源列表(如Agent、数据集等)
(4) 访问控制 :平台根据返回的权限列表,智能控制用户对各类资源的访问权限
二、权限功能配置
- 在发布Agent页面,找到 "权限控制" 开关并启用
- 打开开关后,点击“去配置”,配置好权限的回调查询地址,并保存
完成配置后,点击 "测试连接" 按钮,系统将发送测试请求,验证权限接口是否正常工作。
🔔 注意事项 :为确保你的权限回调服务稳定可靠,建议设置适当的超时处理机制,避免因权限服务异常影响用户体验。
三、权限 SPI 接口说明
说明
BetterYeah 平台对外开放的 Agent 权限扩展能力,通过外部用户权限 SPI 与用户系统进行通讯协作,以完成发布到外部的 Agent 的权限扩展。
SPI 接口
外部用户权限
(1)接口说明
接口概述: 由用户提供,并注册在 BTY 平台的外部用户权限 webhook 接口,用于获取外部用户权限。
Method:
POST
接口路径: 由用户提供
注意事项
用户提供的接口需要自行实现鉴权,支持通过 Header 中的
Workspace-Id
和Access-Key
进行鉴权请求参数中 user_list 需要支持传空数组,平台的 webhook 测试功能,会发起参数为空数组的请求。
(2)请求参数
- 请求头参数
参数名 | 类型 | 必填 | 描述 |
---|---|---|---|
Workspace-Id | String | 是 | 工作空间 ID |
Access-Key | String | 是 | 工作空间 API Key |
Content-Type | String | 是 | application/json |
- 请求 Query Params
参数名 | 类型 | 必填 | 描述 |
---|---|---|---|
action | String | 是 | 固定值:external_user_auth |
- 请求体参数
字段名 | 类型 | 必填 | 描述 |
---|---|---|---|
user_list | list<ExternalUser> | 是 | 外部用户列表 |
user_list[x].user_type | String | 是 | 外部用户类型 |
user_list[x].user_id | String | 是 | 外部用户 ID 或唯一标识 |
- user_type 枚举值
Agent 发布到外部类型 | user_type 值 | user_id 取值来源 |
---|---|---|
微信客服 | WEIXIN_KF | 暂未支持 |
微信公众号 | WEIXIN_MP | 暂未支持 |
企业微信 | WEIXIN_WORK_APP | 暂未支持 |
企业微信机器人 | WEIXIN_WORK_APP_BOT | 暂未支持 |
钉钉机器人(非流式) | DINGTALK_ORGAPP_ROBOT | {senderCorpId}:{senderStaffId} |
钉钉流式机器人 | DINGTALK_STREAM_ROBOT | {senderCorpId}:{senderStaffId} |
钉钉网页应用 | DINGTALK_ORGAPP_WEB | 暂未支持 |
飞书机器人 | FEISHU_APP_BOT | {union_id} |
- 请求示例
curl 'http://example.com?action=external_user_auth' \
--header 'Access-Key: xxx' \
--header 'Workspace-Id: yyy' \
--header 'Content-Type: application/json' \
--data '{
"user_list": [
{
"user_type": "DINGTALK_STREAM_ROBOT",
"user_id": "ding0fb0a52f4b1428abee0fa5d8e4d7c290:17537543348321790"
}
]
}'
- 测试请求示例,平台的 webhook 测试按钮,点击后会发起如下的请求进行接口测试
curl 'http://example.com?action=external_user_auth' \
--header 'Access-Key: xxx' \
--header 'Workspace-Id: yyy' \
--header 'Content-Type: application/json' \
--data '{
"user_list": []
}'
(3)响应参数
- 响应字段
字段名 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | 是 | 响应状态码 |
success | Boolean | 是 | 请求是否成功 |
message | String | 否 | 响应消息 |
data | Object<data> | 否 | 响应数据 |
- data 对象字段
字段名 | 类型 | 必填 | 描述 |
---|---|---|---|
user_permission_list | List<ExternalUserPermission> | 是 | 外部用户权限列表 |
- ExternalUserPermission 对象字段
字段名 | 类型 | 必填 | 描述 |
---|---|---|---|
user_type | String | 是 | 外部用户类型 |
user_id | String | 是 | 外部用户 ID |
allow | Object<PermissionApp> | 否 | 允许的权限配置,不填代表不做任何权限限制 |
- PermissionApp 对象字段
字段名 | 类型 | 必填 | 描述 |
---|---|---|---|
agents | Array[String] | 否 | Agent ID 列表 |
flows | Array[String] | 否 | Flow ID 列表 |
plugins | Array[String] | 否 | Plugin ID(function_id) 列表 |
a2a_agents | Array[String] | 否 | A2A Agent ID 列表 |
datasets | Array[String] | 否 | Dataset Partition ID 列表 |
成功响应示例
- HTTP 状态码:
200
- HTTP 状态码:
{
"code": 200,
"success": true,
"message": "SUCCESS",
"data": {
"user_permission_list": [
{
"user_type": "DINGTALK_STREAM_ROBOT",
"user_id": "ding0fb0a52f4b1428abee0fa5d8e4d7c290:17537543348321790",
"allow": {
"agents": ["779768b867b04de9bded9b80a2ffa259"],
"flows": ["2d0f9a8094524463b40553acfa4619be"],
"plugins": ["3a5cf9381b354145995dd2fb6fbbf4cf"],
"a2a_agents": ["1c9ee1731bdf4a94a0423fe58c21978e"],
"datasets": ["1971","1980"]
}
}
]
}
}
错误响应示例
- HTTP 状态码:
400
- HTTP 状态码:
{
"code": 400,
"success": false,
"message": "workspace_id is required",
"data": null
}
四、场景应用案例
企业知识库差异化访问
场景描述 : 企业有多个部门的用户使用同一个Agent,但需要针对不同部门展示不同的知识库内容。
实现方案 :
第1步:在企业自己的权限中心配置各部门每个用户可访问的知识库ID;
第2步:创建「知识库问答Agent」,并按照上面的流程配置好权限控制;
第3步:部门不同的人,在钉钉机器人或其他端与「知识库问答Agent」问答时,即可根据权限范围,来调用不同的知识库来回答。
4.2 钉钉/飞书机器人的个性化问答
场景描述 :企业在钉钉/飞书中部署了「智能助手机器人」,需要根据用户角色提供不同的子Agent调用和技能调用能力。
实现方案 :
第1步:开发「智能助手机器人」,并关联好子Agent、工作流、插件等技能;
第2步:将「智能助手机器人」发布到钉钉/飞书机器人;
第3步:开启并配置好企业不同用户在使用「智能助手机器人」时的权限范围;
第4步:在钉钉/飞书机器人直接问答,即可根据用户权限来为不同用户展示不同的任务处理能力,提供个性化服务;
🌟 结合企业组织架构,你可以为高管团队、研发部门、销售团队分别定制专属的AI助手的资源访问控制权限,从而保证资源访问的安全性,并大幅提升各部门的工作效率。