Skip to content

PERMISSIONS 权限表 ​

权限表记录“谁可以对哪个资源执行哪些操作”,并可附加数据范围、资源创建者和文件类型等限制。它保存分配给用户或用户组的权限,不是用户最终有效权限的清单;实际访问还会结合用户组、上级资源授权及业务规则判断。

位置 ​

  • 模型路径:/sysdata/data/tables/sec/PERMISSIONS.tbl
  • 物理表名:SZSYS_5_PERMISSIONS

表结构 ​

字段名字段类型含义与存储格式
PERMISSION_IDVARCHAR(64)权限记录的唯一 ID,主键。新增记录时使用新的唯一值
OWNER_IDVARCHAR(64)被授权的用户 ID 或用户组 ID,由 OWNER_TYPE 区分
OWNER_TYPEVARCHAR(1)u:用户;g:用户组
RES_PATHVARCHAR(512)资源的完整权限路径或路径匹配规则,见资源与操作
ALLOWSVARCHAR(4096)允许的操作码,以英文分号 ; 分隔,例如 view-file;view-data
FORBIDSVARCHAR(4096)禁止的操作码,以英文分号 ; 分隔,例如 dev-delete-file;dev-export-file
DATA_RANGEVARCHAR(2048)数据范围的 JSON 对象文本;未设置表示本条记录不追加数据范围限制
GRANTORVARCHAR(64)分配权限的用户 ID
GRANT_TIMETIMESTAMP分配时间;模型默认值为当前时间
OPTIONSVARCHAR(1024)扩展选项的 JSON 对象文本;未设置表示不追加这些限制

数据库中的 ALLOWS、FORBIDS 是分号分隔的文本,不是 JSON 数组;DATA_RANGE、OPTIONS 则必须是合法 JSON,不含注释。

表索引与记录规则 ​

模型仅声明 PERMISSION_ID 为主键,没有声明其他索引或组合唯一约束。同一用户或用户组可以对同一资源保存多条记录,例如分别为查看数据和导出数据指定不同的数据范围。

每条记录中的数据范围和扩展选项随该记录一起参与授权判断。不要将不同范围的操作随意合并为一条记录,否则会改变各项操作的限制。

资源与操作 ​

RES_PATH 使用权限资源路径,不是浏览器 URL。例如:

写法含义
/DEMO/ana/sales.rptDEMO 项目中的指定报表
/DEMO/ana指定目录,授权可由其下级资源继承
/sys/extensions系统扩展管理资源
/DEMO/ana/*.rpt该目录下的报表,* 不跨越 /
/DEMO/ana/**该目录及任意层级的下级路径

路径还支持 ${...} 表达式,按当前用户求值后匹配资源。

ALLOWS、FORBIDS 填写操作码,而不是操作的显示名称。操作码按 - 分级,父操作包含其子操作,例如 dev-create 包含 dev-create-rpt 和 dev-create-dash。只需要部分能力时应填写具体操作,避免授予整个父级操作。

应从目标资源适用的权限操作目录中选择操作。应用可以自定义操作目录;业务自定义操作应使用该应用声明的操作码。

例如,为用户组 sales-readers 分配报表查看和数据查看权限时,可使用以下字段值。用户组 ID 和资源路径需替换为实际值,其余可选字段可不设置:

字段示例值
PERMISSION_ID为本条记录新生成的唯一 ID
OWNER_IDsales-readers
OWNER_TYPEg
RES_PATH/DEMO/ana/sales.rpt
ALLOWSview-file;view-data

数据范围字段格式 ​

DATA_RANGE 用于约束相关操作能够访问的数据,不会单独授予查看、查询或导出权限。范围按项目配置的数据范围维度生效;目标模型需要配置相应的维度关系。

直接指定条件 ​

以下示例允许访问行政区划编码为 420100 的数据。dim 必须替换为项目数据范围维度对应的真实维表 ID,不能填写维表名称或字段名称。

json
{
  "desc": "武汉市数据",
  "items": [
    { "dim": "DIM_REGION_ID", "value": ["420100"] }
  ]
}
属性含义
desc可选的范围说明,用于展示,不参与过滤
items数据范围条件,支持下列三种结构
条件中的 dim数据范围维度对应的维表 ID
条件中的 value维度取值列表、单个字符串,或以 = 开头的表达式。数值取值使用数组,例如 [420100]

items 的三种结构:

  • 单个条件:{"dim":"DIM_REGION_ID","value":["420100"]}。
  • 条件数组:[{"dim":"DIM_REGION_ID","value":["420100"]},{"dim":"DIM_PRODUCT_ID","value":["A"]}],各条件同时满足(AND)。
  • 条件组数组:[[{"dim":"DIM_REGION_ID","value":["420100"]}],[{"dim":"DIM_REGION_ID","value":["420200"]}]],满足任一组即可(OR),每组内各条件同时满足。

不要写入空条件组。未设置 items 表示不追加范围限制,items: [] 则是无效配置,两者含义不同。当前权限读取使用 items,不读取 columns;不能通过在这里填写 columns 限制字段访问。

引用项目预设范围 ​

json
{ "id": "sales-region" }

id 对应资源所属项目设置中的预设数据范围 ID;固定值 default 表示项目默认数据范围。设置 id 后使用引用的范围,不再使用本条记录中直接填写的 items。预设不存在时,本条权限不生效;引用 default 而项目未设置默认范围时,表示不追加范围限制。

无效条件 ​

缺少 dim、取值列表为空、items 结构无法识别或引用的预设不存在,会使本条权限不生效,可在“我的权限”中检查相应的未生效权限。

表达式返回 null 时保留操作授权,并生成取值为字符串 "null" 的范围条件;这不表示取消范围限制。应确保表达式能返回业务上有效的维度值。

扩展选项字段格式 ​

OPTIONS 的属性均可选,不需要时可不设置整个字段。

属性类型效果
matchOwnerboolean为 true 时,仅匹配当前用户创建的资源文件,不匹配目录
alwaysShowFolderboolean为 true 时,可在元数据资源列表中显示尚不存在的授权目录,供用户在其中创建内容;不会提前创建实际目录
fileTypesstring[]收窄“新建其他文件”(dev-create-file)允许的文件类型

仅允许操作自己创建的文件:

json
{ "matchOwner": true }

为用户预留工作目录时可使用 alwaysShowFolder。它要求父目录已经存在,只补出下一层目录;适用于固定路径或表达式求值后的固定路径,不适用于含通配符的路径。matchOwner 为 true 时忽略此选项。

只允许新建 TXT、CSV 等其他文件:

json
{ "fileTypes": ["txt", "csv"] }

类型写小写后缀,不带点号。未设置 fileTypes 或设置为 ["*"] 表示不追加类型限制;["*", "!csv"] 表示排除 CSV。不要只写排除项,也不要在同一列表中同时允许和排除同一类型。

报表、模型、目录等具有专用新建操作,应分别授予 dev-create-rpt、dev-create-tbl、dev-create-fold 等操作,不能用 fileTypes 代替。此属性也不用于限制删除类型或导出格式。

修改与验证 ​

  • 最终权限需要综合用户直接授权、用户组授权、上级资源授权和禁止项判断,不能仅凭某一行确认用户是否有权。不同数据范围的授权也可能合并,新增一条较窄范围的记录不一定能收窄已有权限。
  • 修改前校验 JSON、操作码及其适用资源。不要依靠错误配置拒绝访问:当前读取过程可能忽略无法解析的 JSON,使对应限制没有生效。
  • 建议通过权限管理界面修改。第三方工具直接改库不会自动触发权限缓存刷新;若直接修改,应在维护窗口重启各服务节点,并重新登录验证。
  • 验证时同时检查允许访问和应被拒绝的场景;有数据范围时,还需核对实际返回的数据。
微信公众号微信公众号:山川软件