角色与权限控制
通过 config.permissions 与 config.roles,可以在设计器中预置权限树和角色树。配置后,逻辑条件里可直接按「权限 / 角色」判断,也可在计算公式中使用 HAS_PERMISSION、HAS_ROLE,实现字段显隐、必填、禁用等业务授权。
## 数据结构 权限与角色使用相同的树形结构:
ts
type AuthNode = {
// 唯一标识,条件判断与公式校验时使用该值
value: string;
// 显示名称
label: string;
// 子级节点
children?: AuthNode[];
};
type AuthList = AuthNode[];预置权限与角色列表
将权限树、角色树写入设计器 config 后,逻辑条件的类型选择中才会出现「权限」「角色」选项。
vue
<template>
<fc-designer ref="designer" :config="config"/>
</template>
<script setup>
const config = {
permissions: [
{
value: 'system',
label: '系统管理',
children: [
{
value: 'system:user',
label: '用户管理',
children: [
{ value: 'system:user:list', label: '用户列表' },
{ value: 'system:user:create', label: '新增用户' },
{ value: 'system:user:edit', label: '编辑用户' },
{ value: 'system:user:delete', label: '删除用户' },
],
},
{
value: 'system:role',
label: '角色管理',
children: [
{ value: 'system:role:list', label: '角色列表' },
{ value: 'system:role:assign', label: '分配权限' },
],
},
],
},
{
value: 'goods',
label: '商品管理',
children: [
{ value: 'goods:info:list', label: '商品列表' },
{ value: 'goods:info:create', label: '发布商品' },
{ value: 'goods:info:export', label: '导出商品' },
],
},
],
roles: [
{
value: 'platform',
label: '平台端',
children: [
{ value: 'platform:admin:super', label: '超级管理员' },
{ value: 'platform:admin:ops', label: '运营管理员' },
{ value: 'platform:staff:cs', label: '客服专员' },
],
},
{
value: 'merchant',
label: '商户端',
children: [
{ value: 'merchant:store:manager', label: '店长' },
{ value: 'merchant:store:cashier', label: '收银员' },
{ value: 'merchant:ops:goods', label: '商品运营' },
],
},
],
};
</script>说明:
- 未配置或配置为空数组时,条件面板不会显示对应类型。
value建议使用稳定的业务编码(如system:user:list),便于前后端统一。- 该配置只定义「可选清单」,不等于当前用户已拥有的权限或角色。
注入当前用户权限与角色
运行时(含设计器预览)需要把当前用户实际拥有的权限、角色写入全局数据,逻辑条件与公式才能正确判断。
| 数据 Key | 说明 | 数据类型 |
|---|---|---|
$permissions | 当前用户拥有的权限标识列表 | string[] |
$roles | 当前用户拥有的角色标识列表 | string[] |
js
// 登录成功或进入表单页时注入
formCreate.setData('$permissions', [
'system:user:list',
'system:user:edit',
'goods:info:list',
]);
formCreate.setData('$roles', [
'merchant:store:manager',
]);也可在表单事件中通过 API 动态更新:
js
function onFormMounted($inject) {
const api = $inject.api;
api.setData('$permissions', ['system:user:list']);
api.setData('$roles', ['platform:admin:ops']);
}在逻辑条件中使用

配置好权限 / 角色列表后,可在隐藏条件、必填条件、禁用条件、数据联动、组件联动等逻辑条件中选择:
- 条件类型选择 权限 或 角色
- 比较方式选择 包含 / 不包含
- 从树中选择目标权限或角色
典型场景:
- 无「导出商品」权限时隐藏导出按钮
- 非「店长」角色时禁用金额字段
- 拥有「审核管理员」角色时显示审批区
在计算公式中使用
内置两个高阶函数,可直接判断当前用户是否拥有指定权限或角色:
| 函数 | 说明 | 示例 |
|---|---|---|
HAS_PERMISSION | 检查当前用户是否拥有指定权限 | HAS_PERMISSION("system:user:list") = true |
HAS_ROLE | 检查当前用户是否拥有指定角色 | HAS_ROLE("merchant:store:manager") = true |
text
HAS_PERMISSION("goods:info:export")text
IF(HAS_ROLE("platform:admin:super"), true, false)完整函数说明见内置公式函数。
与组件操作权限的区别
| 能力 | 配置项 | 作用对象 |
|---|---|---|
| 角色与权限控制 | permissions / roles + $permissions / $roles | 表单运行态业务授权(显隐、必填、禁用、计算等) |
| 组件操作权限 | componentPermission | 设计器内组件的编辑操作与配置项权限 |
二者互不影响,可按场景配合使用。组件操作权限详见控制组件操作权限。
注意事项
- 逻辑条件判断的是
$permissions/$roles中是否包含所选value,请保证注入值与树节点value一致。 - 权限、角色变更后需重新
setData,已打开的表单才会按新授权生效。 - 建议在所有实际渲染表单的渲染器实例上同步写入相同数据,避免设计预览与正式运行结果不一致。


