# 按部门和地区设计数据权限

用一个带变量的数据角色，让每个人只看到自己负责范围的数据。

使用指南 · 模块: permissions · 管理人员 · 部署形态：资料未说明 · 已确认产品版本：资料未说明 · 来源：编辑整理 · 按产品 4.2.76-1110（CLI 0.0.18）核对；私有部署的旧版本可能不包含近期变化。

本教程用一个常见场景演示数据权限的设计：销售人员只能看到自己所在大区的订单，并且看不到客户手机号；管理层可以看到全部数据。

## 场景

数据源中有订单表 `sales.orders`，包含 `region`（大区）、`amount`（金额）、`customer_phone`（客户手机号）等字段。

| 人员   | 应看到的数据        |
| ---- | ------------- |
| 华东销售 | 华东区订单，不含客户手机号 |
| 华南销售 | 华南区订单，不含客户手机号 |
| 管理层  | 全部订单          |

## 设计思路

- **按变量区分地区，不按地区建角色。** 建一个「区域销售」角色，用变量 `region` 表示大区，而不是建「华东销售」「华南销售」两个角色。地区再多，也只维护一个角色。
- **允许策略管范围，拒绝策略管敏感字段。** 一条允许策略限定可见的表和行，一条拒绝策略排除手机号。
- **管理层不绑定角色。** 不绑定数据角色即为「全部数据」，仍受智能体数据源限制。

需要项目负责人或项目管理员。入口：「更多」→「数据访问控制」。

## 步骤

**建允许策略：限定表和行**

新建策略「订单-本区可见」，权限选「允许」，添加数据源。

- 字段级规则：表名「完全匹配」`orders`。
- 行级过滤：表 `sales.orders`，字段 `region`，运算符 `=`，值的来源选「角色变量」，变量名填 `region`。

**建拒绝策略：排除手机号**

新建策略「隐藏客户手机号」，权限选「拒绝」，添加同一数据源，字段级规则：字段名「完全匹配」`customer_phone`。

**建角色**

新建角色「区域销售」，在「应用策略」中添加以上两条策略。在「数据范围预览」中确认能看到 `orders` 表，且不包含 `customer_phone`。

**分配给成员**

在「项目设置」→「项目成员」中，为华东的销售人员选择「区域销售」，变量 `region` 填 `华东`；华南的填 `华南`。

已配置企业身份集成并同步了部门资料时，可以把 `region` 设为引用成员的部门资料，人员调岗后自动生效，见[成员与角色](https://docs.asktable.com/organization/members-and-roles)。

管理层成员不绑定数据角色。

## 检查结果

- 用华东销售的账号提问「上个月各区销售额」，结果只包含华东。
- 提问「列出客户手机号」，智能体说明无法访问该字段。
- 用管理层账号提问，结果包含所有大区。

如果华东销售提问时提示「数据权限配置未完成」，说明 `region` 没有填写，在「项目成员」中补齐变量。

## 延伸

- 需要多个值（例如负责两个大区）时，行级过滤的值来源选「SQL（高级）」，使用多值变量。
- 飞书群里的提问者，在智能体的「人员权限」中为其授权同一个角色并填写变量，见[飞书渠道用户权限](https://docs.asktable.com/permissions/feishu)。
- 只是不想让 AI 看到真实手机号，但仍需按手机号统计时，用[脱敏](https://docs.asktable.com/data/hidden-fields)代替拒绝策略。
