如何同时为两个用户/团队分配 R/W 所有权



我正在设计CRM中的审批系统,需要一些关于安全设计的输入。我使用的实体具有用户/团队级别的 R/W 权限。整体实现有点复杂,但为了保持这个问题简单,请考虑系统中涉及的以下两方:

请求者:需要对他创建的请求进行 R/W 访问。

审批者团队:这些是预定义的团队,其用户将批准/拒绝请求。需要对需要其批准的请求进行 R/W 访问。

问题:如何处理同时为请求者和审批者团队提供 R/W 访问权限?由于 CRM 中不能有多个记录所有者,因此 所有者 字段一次只能包含其中任何一个(请求者或审批者团队)。

我可以使用共享功能想到两种解决方案,并想确认我的理解:

a.a.将"请求者"设置为记录所有者,并以编程方式与审批者团队共享记录。此方法的问题在于,即使我与审批者团队共享记录,我也无法在主窗体上显示共享详细信息(这是一项要求)。

b.b.将审批者团队设置为记录所有者,并使用访问模板以编程方式与请求者共享记录。

如果我缺少任何 OOB 可能性,是否有更好的解决方案来处理此要求?

好吧,我相信你可以用一点编码来制作解决方案A(我不确定你是否不介意编码,但我们在StackOverflow上,所以我认为你应该考虑这一点)。 首先,设计取决于一个简单的问题 - 此请求应该与多个团队共享,还是仅与单个团队共享?单个团队很简单 - 只需在请求上添加一个查找,这将指向一个团队。当这个团队被填满时(我假设这个团队的选择是以某种方式自动完成的,但这并不重要,因为在任何情况下你都必须以某种方式选择团队),你运行一个简单的插件来共享这个团队的记录。使用SDK共享非常简单,只需使用GrantAccessRequest:

var grantAccessRequest = new GrantAccessRequest
{
PrincipalAccess = new PrincipalAccess
{
AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,
Principal = teamEntityReference
},
Target = requestReference
};

因此,在请求的表单上,您将保留请求的所有者,并将有一个指向正在处理此请求的团队的查找。当然,您可以通过例如在接受或拒绝请求或更改请求查找等方式取消共享来进一步刺激它。这将使 POA 表更加满意,因为共享大量记录会导致该表的快速增长,因此如果不再需要共享,取消共享记录非常重要。

如果要共享给多个团队,您仍然可以在请求和团队之间创建 N:N 关系,只需在请求和团队之间的关联消息插件中共享请求(这是为用户引入访问团队之前的标准选项,仍然是团队的唯一选项)。此关系可以在请求表单上显示为子网格(它看起来像访问团队子网格)。

当然,为了防止用户自行共享请求记录(在这种情况下,查找/子网格中将没有团队),他们不应具有共享权限。插件应在管理上下文中进行共享。

更新: 至于评论中的 POA 注意事项:这两种解决方案都会使您的 POA 增长,因为对于这两种解决方案,您都必须与团队或用户共享请求。如果您将使用访问团队,则每个请求仍然有一个 POA 条目(因此每年 100K 个条目)。我相信这里最重要的是请求在结束其生命周期时会发生什么。如果它不必对团队可见,那么在它被接受/拒绝后,您应该简单地有一个机制(插件或一些及时运行的自定义应用程序),该机制将取消共享所有不再需要共享的请求,使您的 POA 表保持合理的大小。

还有另一种处理方案的方法,不需要那么多的共享/取消共享逻辑。您可以在与请求的 1:N 父关系中创建"请求接受"实体。由于这是父关系,因此拥有请求的用户将看到所有"请求接受",并且"请求接受"将由适当的团队拥有(因此只有此团队才能访问)。当然,我对业务逻辑一无所知,但我假设"请求接受"只能包含与团队相关的信息,这些信息可以在插件或工作流中复制。

UPDATE2:正如我刚刚看到的,您不能在稍后阶段取消共享记录。但我假设在某个时间点请求已完成/接受/完成/拒绝或其他什么。如果此时 Teams 和用户都应该有权访问此请求,那么创建某种单独的实体"存档请求"可能是一件好事,该实体不会共享,只是为所有有兴趣查看此信息并删除原始请求的主体克隆。这个想法有很多变体,我希望你明白它,并可以根据你的情况进行调整

你的选择a最有意义:请求者是创建者,应该拥有请求。审批者仅对请求执行操作,因此应与之共享。

关于显示共享详细信息,您可以将子网格置于以下格式:https://www.microsoft.com/en-us/dynamics/crm-customer-center/create-a-team-template-and-add-to-an-entity-form.aspx

将团队模板添加到实体窗体

确保您具有系统管理员安全角色或 Microsoft Dynamics 365 中的等效权限。

检查您的安全角色

[在链接页面中阅读更多内容]

由于请求者是用户,审批者是团队,因此OOB只能执行选项b(分配给团队,通过访问团队与用户共享)。

我想不出任何涉及枚举团队成员并对其每个人采取行动的干净解决方案,所以我不会建议它。

最新更新