Dataverse行级安全
行级安全是高级数据库的基本访问需求之一。Dataverse使用基于角色的访问控制(RBAC),没有访问层次结构,而是基于创建的角色为每个表设置访问权限。这样可以通过配置实现所有角色所需的最小权限。
安全角色默认提供表级访问,角色允许以下特定级别:
- 创建
- 读取
- 更新
- 删除
- 共享
- 追加
- 追加到
它还提供了启用字段级安全的附加选项,因此角色可以为每个字段设置特定级别(例如,可以编辑除一个字段外的所有字段,该字段只能查看,非常适合审批)。但如果您想根据特定行的值控制访问权限呢?一个好的例子是商店销售,区域经理只能查看其区域内商店的销售数据。这就是行级安全,通常是最难使用的,因为它使用动态数据进行访问,而不是像表和字段这样的模式数据。
Dataverse使用业务单元启用行级安全,其附加好处是它们是基于节点的,因此有父级可以继承其子级的访问权限。但正如我所说,它不像表和字段级那样容易设置,所以我想写一篇博客来介绍它😎
启用功能
创建业务单元
为业务单元创建安全角色
将角色分配给用户/团队
设置记录业务单元
1. 启用功能
业务单元需要在每个环境中启用,因为这需要更新所有Dataverse表,向模式添加业务单元字段。因此,启用时可能需要几分钟时间才能正确通过环境,并且还会强制所有您希望部署到的下游环境也启用此功能。
要启用,请转到PPAC(Power Platform管理中心),选择环境,转到设置/产品功能,然后打开“跨业务单元的记录所有权”。
就这样。
2. 创建业务单元
业务单元在每个环境中创建(遗憾的是,它们不支持解决方案感知,因此无法部署)。就像功能标志一样,您转到PPAC,选择环境,设置/用户+权限 - 业务单元。
您应该看到所有当前的业务单元,并在顶部有创建新业务单元的选项。业务单元可以嵌套/分层,因此您可以将任何其他业务单元设置为父级(否则它将默认为整个环境单元)。
您可以在这里或Dynamics 365应用程序中更新/管理它们。Dynamics应用程序的附加好处是能够导出/导入您的业务单元(这样您可以复制到其他环境)。
请注意,业务单元像大多数东西一样只是Dataverse表(businessunits),因此使用流/自定义脚本,您可以利用API直接在环境之间复制业务单元。
3. 为业务单元创建安全角色
安全角色将用于使用业务单元的表,我在这里写了一篇关于安全角色的完整博客以获取更多信息。但在这个例子中,我创建了一个简单的销售表,包含商店、区域、销售。我想让用户访问其业务单元区域内的商店。
角色需要具有对自定义表的所有所需访问权限,但设置为业务单元。此外,您需要具有读取和追加到业务单元表的权限。
请注意,您还可以创建范围限定到业务单元的安全角色,因此您可以拥有使用团队/用户设置业务单元的角色,或者设置业务单元的角色。
4. 将角色分配给用户
尽管业务单元显示为团队,但无法向其中添加用户,因此我们需要创建新团队。
创建团队时,我们可以设置要使用的业务单元,这意味着团队的所有成员都将具有对该业务单元的访问权限。
我们最后将自定义安全角色分配给团队。
5. 设置记录业务单元
现在我们有了访问设置,但如何将区域链接到业务单元?简单的方法是我们有一对一的映射,因此我们不再有区域,只有业务单元,当添加数据时,我们通过设置业务单元来设置区域。
另一种方法是使用自动化低代码插件,我之前在这里更详细地介绍过它们。 因此,在这种情况下,创建行将触发一个插件来设置业务单元。为了更容易,我创建了一个查找表,在这种情况下是区域,它在区域和业务单元之间创建关系。我们需要确保我们的销售表使用区域表作为查找,并确保我们的安全角色具有读取和追加此表的权限。
这可能看起来不必要,而且可能确实如此,但它确实允许您将业务单元与区域分开,这意味着您可以添加更复杂的逻辑或在不同区域等重用业务单元。 低代码插件/Dataverse函数状态您应该使用Set()来更新记录,以防止无限循环。但由于这仍然非常错误,它不起作用,您会收到以下错误:“此记录无法复制。相反,使用{…}表示法创建内联记录以复制所需的各个字段。” 这个错误在18个月前被记录,但仍然没有修复,所以我对它很快修复不抱太大希望。这意味着我们只能在创建时运行此操作,而不能修改。要修改,我们必须触发一个流。 低代码插件应该看起来像这样:
|
|
就这样,我们现在有了行级安全,明白我的意思了吗,它不像字段或表级那样简单。