示例:IDO 筛选器
此示例适用于“行授权”表单。
简单的 IDO 筛选器示例:用户名属性 = 当前用户
您希望允许所有用户在“用户”表单上查看自己的用户信息(说明、电子邮件地址、组成员等等),但不允许他们查看其他用户的信息。为此,您需要按如下方式设置字段:
字段 | 设置 | 备注 |
---|---|---|
IDO | UserNames | 该筛选器只应用于用户名 IDO。 |
用户 | 留为空白以使该筛选器应用于所有用户。 | |
组 | 留为空白以使该筛选器应用于所有组中的用户。 | |
Property | 用户名 | “用户”表单上的“用户 ID”字段绑定到 UserNames.Username 属性。(Usernames.Userid 属性只供内部使用。) |
(运算符) | = | |
该值 | 当前用户 |
当单击“”时,所显示的虚拟 SQL 查询如下所示:
(Username = dbo.UserNameSp())
激活并保存了该筛选器之后,已登录的所有用户(以及对该表单具有正确权限的人员)都能打开“用户”表单,但只会看到与自己的用户 ID 相匹配的记录。
以下主题显示更复杂的 IDO 筛选器的示例:
筛选器的组合方式
以下信息适用于复杂的情况,例如当 IDO 相互继承并为每个级别分别定义了筛选器时。如果一个 IDO 扩展了另一个 IDO,则会继承其全部筛选器,除非该 IDO 正在使用“扩展并替换”功能。
对于以下所有情况,只会使用被标记为“活动”状态的筛选器。
IDO 筛选器子句是通过对以下所有或任何类别执行 AND 运算而生成的:
- 通用 IDO 筛选器,其用户和组都为空
- 用户的 IDO 筛选器,其用户等于当前的登录名
- 用户所在组的 IDO 筛选器,其组等于当前用户所在组的任意成员。(组筛选器被集体执行 OR 运算,原因在于用户应能够看到对用户所在的任何组可见的行。)
第一个和第二个类别的子句包含该类别中被集体执行了 AND 运算的所有筛选器;第三个类别的子句包含用户所在的每组中被集体执行了 OR 运算的子句;组子句本身都是该组中被集体执行了 AND 运算的所有筛选器。
也就是说,一名属于多个组的用户能够看到这些不同的组允许他们看到的所有数据,但可能会受到用户本人的筛选器限制(还可能受到通用筛选器的限制,但通用筛选器通常不会比任何组筛选器更严格,否则就失去了它们自身的意义。)例如,某个 IDO 具有下面这些已经激活的筛选器:
每个人:E1,E2;
用户U1,U2;
组 1:G1-1,G1-2;
组 2:G2-1,G2-2;
需要访问 IDO 的用户是组 1 和组 2 的共有成员。随后按如下方式设置所构建的筛选器:
(E1 AND E2) AND (U1 AND U2) AND ((G1-1 AND G1-2) OR (G2-1 AND G2-2))