如果我要实现这样的场景,我将创建一个链接到客户记录 (new_customer) 的客户访问记录 (new_custaccess)。对于此示例 - 保持简单 - 我将假设客户具有他们必须提供的简单访问代码,然后银行员工(操作员)才能访问记录。访问代码存储在 new_custaccess 的字段 (new_secretcode) 中。
安全性在于 Operator 对 new_customer 没有权限,对 new_custaccess 没有读取/更新权限。
new_custaccess 上有一个字段 (new_secretcodeoperator),操作员可以更新。所有其他字段都被限制更新(并且,如果合适的话,读取)给操作员。
当客户呼叫并且操作员搜索适当的 new_custaccess 记录时。一旦他们找到记录,他们就会将客户提供的密码输入字段 new_secretcode 并进行保存。
更新前查询在具有完全权限的用户的上下文中执行 new_custaccess(称之为 MASTER,在这里很有趣。)该插件检查提供的代码是否与密码匹配。如果不是,它会引发错误并且操作员可以重试。如果确实匹配,插件会从记录中删除字段 new_secretcodeoperator,以防止它保存值。它还将记录 new_customer 的适当权限共享给适当的操作员。
操作员现在可以访问客户记录(您必须决定是级联权限还是共享每条记录 - 该决定超出了本次讨论范围。)
我们现在需要处理撤销对客户记录的许可。我将通过拥有一个实体 new_customeraccess 来处理这个问题,该实体由前一个插件在授予客户记录访问权限时生成。应在创建 new_customeraccess 时触发工作流,导致 new_customeraccess 每 20 分钟(或客户喜欢的任何时间)更新一次。
插件在 new_customeraccess 的更新上注册,当工作流更新的字段被修改时触发。该插件将通过业务决定的任何标准来确定是继续共享还是撤销共享。
我还将从 new_customer 功能区创建一些基于 javascript/html 的弹出窗口,以通过更新 new_customeraccess 上的字段来结束共享。通过字段级安全性为操作员提供关于 new_customeraccess 的有限更新权限。
这应该可以在不超出标准 CRM 定制模型的情况下完成您想要的。不完全确定您在定制上划定界限,但这可能与您将到达的 OOTB 一样接近。几个插件就是您需要的所有 C#。唯一的 JavaScript 将用于可用性,而不是功能。
如果您有任何问题,请告诉我。