跳到主要内容

限制规则

当对象设置限制规则后,对用户访问对象数据进行限定,使得用户只能访问相应限制条件的数据。类似于列表视图过滤功能。 要配置限制规则,请在”设置“应用中进入”对象设置→对象“界面,点击要设置相关规则的对象名称进入对象设置界面,然后在底部可以看到”限制规则“子表,在这里新建相关规则即可:

  • API名称 唯一标识名称,需要符合API命名规范。
  • 启用 勾选表示立刻启用规则。
  • 指定条目条件 用于配置该规则生效的条件,需输入类似 {{$user.profile !='user'}} 这种公式表达式,当条件成立时该规则才生效。
  • 记录过滤器 输入要共享或限制查看的数据的过滤条件,这里也支持“指定条目条件”中一样的公式表达式语法。

指定条目条件

给共享/限制规则设置的”指定条目条件“是一个公式表达式,Steedos权限引擎会执行该表达式并根据执行结果来判断是否要把规则中配置的”记录过滤器“时配置的过滤条件叠加到最终查询结果中。

公式格式

{{ javascript语法的表达式 }}

必须以 ‘{{‘ 开头,以 ’}}’ 结尾,其包裹的是一个标准的javascript表达式。

支持变量

公式表达式中支持以下变量,可以直接在表达式中引用它们:

  • $user : Dictionary<any>  userSession,当前登录用户信息,详细请参考后续附录。
  • global: Dictionary<any>  全局变量,目前只支持now变量。公式表达式global.now会输出当前时间值。

请注意该表达式是在服务端运行的,所以无法在表达式中引用前端浏览器中的全局变量或函数。

记录过滤器

给共享/限制规则设置的”记录过滤器“是要共享或限制查看的数据的过滤条件,其语法规则请参考该文档底部 查询过滤条件详解 小节。

这里输入的内容也是支持公式表达式语法的,其表达式语法与上面提到的“指定条目条件”是一样的。

只要在Steedos中查询数据,Steedos权限引擎就会把满足”指定条目条件“的共享/限制规则中的”记录过滤器“里配置的过滤条件叠加到最终查询条件中,整个查询计算过程请参考该文档顶部提到的 权限计算 - 查询 示意图

  • 共享规则:如果配置的是共享规则,过滤条件会以OR 的方式叠加到最终的查询过滤条件中。
  • 限制规则:如果配置的是限制规则,过滤条件会以AND 的方式叠加到最终的查询过滤条件中。

示例

假设在某个魔方项目中有三个分部,分别表示上海总公司、南京分公司和杭州分公司,在该项目中需要通过权限配置来实现公司内部的业务管理人员可以查看本公司所有外部客户创建的合同数据。

这里说的外部客户指的是系统中简档为”customer“的用户,在不配置共享规则的情况下,我们可以按需求给”业务管理员 salesman“这个权限集下的用户配置”合同“对象权限,勾选”查看本分部“来允许用户查看本分部的所有合同数据。

细想我们会发现需求中提的要求是业务管理员只能看到其本人创建以及外部客户创建的合同数据,并不允许其查看其他内部人员创建的合同数据。

要实现该需求,我们可以通过给合同对象配置限制规则来缩小业务管理员的查看数据权限,下面我们详细讲解下这种方式的配置方法:

要通过缩小业务管理员的查看合同数据权限这种方式来实现需求的话,我们在给”业务管理员“这个权限集下配置的”合同“对象权限中,需要勾选”查看本分部“属性来允许用户查看本分部的所有合同数据,这样的话业务管理员比需求要求的权限就偏大了,我们可以给合同对象配置一个限制规则来缩小其权限:

  • 指定条目条件 {{$user.roles.indexOf("salesman") > -1}}
  • 记录过滤器 {{[["profile__c", "=", "customer"], "or", ["owner", "=", $user.userId]]}}
  • 描述 限制只能查看外部客户创建的合同数据或自己创建的数据,这里不需要配置["company_id", "=", $user.company_id]是因为对象权限中勾选了”查看本分部“属性会自动带上。