3. 接入权限
本章在 CRM 离开 dev 之前就把权限收紧。
预计耗时:25 分钟。
3.1 Permission code
在 permissions.json 中注册 code。AuraBoot 强制 <module>.<resource>.<action> 命名(参见 权限)。
{
"permissions": [
{ "code": "crm.lead.manage", "name:zh-CN": "线索管理", "name:en": "Lead Management", "resourceType": "operation", "module": "crm" },
{ "code": "crm.lead.read", "name:zh-CN": "查看线索", "name:en": "View Leads", "resourceType": "data", "module": "crm" },
{ "code": "crm.account.manage", "name:zh-CN": "客户管理", "name:en": "Account Management", "resourceType": "operation", "module": "crm" },
{ "code": "crm.account.read", "name:zh-CN": "查看客户", "name:en": "View Accounts", "resourceType": "data", "module": "crm" },
{ "code": "crm.opportunity.manage", "name:zh-CN": "商机管理", "name:en": "Opportunity Management", "resourceType": "operation", "module": "crm" },
{ "code": "crm.opportunity.read", "name:zh-CN": "查看商机", "name:en": "View Opportunities", "resourceType": "data", "module": "crm" }
]
}每个 resource 通常拆为 manage(写)与 read(读)两类 action;像“资格认证 (qualify)”“转化 (convert)”这类带状态机的操作走 Command(crm:qualify_lead、crm:convert_lead 等),由 Command 自身的权限绑定控制,不需要单列 permission code。
运行静态检查:
# run locally
node scripts/validate-permission-codes.mjs3.2 角色
创建三个角色:
| 角色 | 权限 |
|---|---|
crm.rep | crm.lead.read + crm.lead.manage + crm.opportunity.read |
crm.manager | crm.lead.manage + crm.opportunity.manage + crm.account.manage |
crm.admin | crm.*.manage + crm.*.read |
在 System → Users 中绑定角色到用户。
3.3 行级数据权限
销售只应看到自己负责的 lead 与 opportunity。
进入 Studio → Data Permissions → New rule,为角色 + 资源 + 操作配置数据范围(scope)。平台的数据范围是枚举类型:none / self / dept / dept_and_sub / all(DataScopeType),self 表示只能看到自己负责的记录(按模型的 owner 字段比对当前用户):
- Model:
crm_lead_common - 角色:
crm.rep - 数据范围:
self(crm_lead_common的 owner 字段为crm_lead_assigned_to)
对 crm_opportunity_common 重复此操作(其 owner 字段为 crm_opp_owner)。Manager 与 admin 配置数据范围 all,即可见全部记录。

3.4 给 Controller / Command 加注解
Controller / 方法可通过 @RequirePermission("<code>") 声明所需权限,其值是 permission code 字符串,例如 @RequirePermission("crm.lead.manage")(注解定义见 RequirePermission.java,String value())。关键约束:注解里引用的 code 必须已在 permissions.json 注册,否则会被 validate-permission-codes.mjs 标为 unregistered code(红线 #13)。
3.5 验证
- 以
crm.rep用户登录 → 列表只展示自己的行(self数据范围生效) - 以仅有
crm.opportunity.read的用户调用推进阶段命令(如crm:advance_opp_to_proposal)→ 返回 403(无权限) - 以
crm.manager登录 → 所有行可见,推进阶段命令可执行(已有crm.opportunity.manage) - 运行
node scripts/validate-permission-codes.mjs→ 没有unregistered code警告