访问策略的先验条件可使用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拼接,作为过滤条件,查询对象数据。如果忽略所有规则,则无过滤条件;如果没有允许规则,则过滤条件仅拼接拒绝规则
回到顶部
咨询热线