全部文档
文档中心领域模型功能访问策略(模型权限)全局变量与访问规则(DeepModel相关)

全局变量与访问规则(DeepModel相关)

访问策略的先验条件可使用DeepModel访问规则,即基于DeepQL的对象规则,实现灵活配置。访问规则在DeepModel中配置,涉及全局变量、访问规则两部分

全局变量是在整个DeepModel(同空间跨应用)中使用的变量,可在DeepQL中使用

  • 入口:基础服务-全局变量

  • 按类型分为:系统变量、自定义变量,目前仅支持系统变量

  • 按是否动态计算分为:非动态计算的变量、动态计算的变量

    • 非动态计算的变量:查询时,系统自动给非动态计算的系统变量赋值,类似:set global spacezauoyn::current_user_id := <str>’62d7ea9f-cd92-4630-a173-37b18ef91fd0’

    • 动态计算的变量:基于DeepQL表达式动态计算变量值

系统变量是空间级变量,即属于当前空间对应模块,现已提供以下系统变量

  • current_user_id:当前用户ID,用于传入当前会话(session)用户的user_id

  • current_user:当前用户,根据当前用户ID获取用户对象SystemUser中的对应数据

  • 在DeepQL中使用时,形如:global ${当前空间模块}::${系统变量},例如:global spacezauoyn::current_user

  • 可用于DeepModel访问规则,作为当前用户,例如判断当前用户是否为需求负责人

  • 可用于DeepModel查询器中保存查询,作为当前用户,例如查询当前用户昵称,以在UX中展示

访问规则是基于DeepQL的对象规则,本质是一个布尔表达式,判断当前用户对指定对象数据是否符合规则

有以下两个入口,注:目前仅当前应用标准对象可新建访问规则

  • 所有对象:基础服务-访问规则,展示当前应用所有标准对象的访问规则,新建规则时可指定当前应用标准对象

  • 分对象:对象详情页-访问规则,展示当前对象的访问规则,新建规则时默认为当前对象

规则配置包含以下两部分

  • 应用用户组:可不分用户组,或指定当前用户在其中任一用户组。该配置项可看做用户组配置的UI模式

  • 访问表达式:规则对应的DeepQL语句(语法详见DeepModel使用文档:DeepQL查询语句),即布尔表达式。可使用模板辅助生成对应语句,包括

    • 基于状态的模板:用于生成是否符合某一状态的表达式。例如判断是否为已采纳的需求,需要指定作为状态的属性与状态值

    • 基于用户的模板:用于生成当前用户是否匹配某一用户信息的表达式。例如:判断当前用户是否为需求负责人,需要指定作为用户信息的属性,目前仅限目标对象为用户对象SystemUser的链接

  • 最终生成的规则表达式为两部分的且,即同时满足应用用户组、访问表达式,可预览最终对应的布尔表达式

注:访问表达式为多个表达式拼接时,可能需要进行空值兼容,由于or、and、not表达式中任一操作数为空时查询结果为空集。可通过操作符??确保查询结果为布尔值,语法如:A ?? B,表示A非空则为A,否则为B。例如:.req_status = ‘approved’ or .req_owner.system_user = global spacezauoyn::current_user,可调整为((.req_status = ‘approved’) ?? false) or ((.req_owner.system_user = global spacezauoyn::current_user) ?? false)

考虑到页面打开速度,目前仅规则保存时校验,页面打开时不校验。可点击“校验”,手动校验访问规则内容是否合法,校验出错的规则显示报错样式,规则详情中展示异常文案

可点击“在新标签页测试”,测试指定用户、对象,指定访问规则的效果

  • 注:测试逻辑类似访问权限判定,但有所简化,取所有允许规则的并集即or拼接,再去掉所有拒绝规则即and not拼接,作为过滤条件,查询对象数据。如果忽略所有规则,则无过滤条件;如果没有允许规则,则过滤条件仅拼接拒绝规则

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send