首页 > 其他分享 >新的权限模型Matrix data access structure介绍

新的权限模型Matrix data access structure介绍

时间:2023-06-08 18:33:46浏览次数:53  
标签:Matrix Business BU2 角色 access Owning 权限 data Unit

这是我的第494篇原创文章,写于2023年6月8日。

2021年11月2日,Power Apps博客的博文 Announcing Public Preview for modernize business units 宣布了Modernized Business Units开启Public preview阶段,到本文写作时,这个Feature已经General Available了。相关功能介绍请参考官方文档 Security concepts in Microsoft Dataverse 的 Matrix data access structure (Modernized Business Units) 章节,有个视频 First look at Modernized Business Units in Microsoft Dataverse 讲得不错,我将其转载到我的B站了,观看请点击 此链接。 

为了方便解说和测试,我建立了如下结构的Business Unit。

新的权限模型Matrix data access structure介绍_Power Platform


我从最小的能使用App的角色克隆一个角色出来,打开 Power Platform Admin Center,选择对应的环境,点击 Users + permissions 下面的Security roles链接。

新的权限模型Matrix data access structure介绍_Dynamics 365_02


我将标准的默认最小访问权限的 App Opener角色Copy出来一个,命名为UserPrivileges名称,再Copy一个出来命名为 BUPrivileges,还Copy了一个出来命名为ParentChildBUPrivileges,对于我要测试的实体Demo Entity分别是个人级别所有权限,业务部门级别,上下级业务部门级别所有权限。

新的权限模型Matrix data access structure介绍_安全模型_03


创建的账号清单如下:

新的权限模型Matrix data access structure介绍_安全模型_04

首先我用这些账号各创建了一条数据,可以看到列表界面是可以将 Owning Business Unit字段(字段逻辑名为owningbusinessunit)显示出来的,当然也可以显示到表单上。

新的权限模型Matrix data access structure介绍_Power Platform_05


在表单上显示的Owning Business Unit字段目前是只读的。

新的权限模型Matrix data access structure介绍_Dynamics 365_06


下面我们来启用这个功能,登录 Power Platform Admin Center,选择对应的环境,然后点击 Settings > Product > Features,将 Record ownership across Business Units 这个Feature设置为On,然后保存。

新的权限模型Matrix data access structure介绍_安全模型_07


几分钟后就启用成功了,启用成功第一个发现就是Owning Business Unit字段(字段逻辑名为owningbusinessunit)可以编辑了,不像之前那样是锁定的了(官方原文是:Each record has an Owning Business Unit column which determines which business unit owns the record. This column defaults to the user’s business unit when the record is created and cannot be changed except when the feature switch is turned ON.)。如果是普通用户的话,需要用户的权限包括了对Business Unit这个表的Append To权限最小是Business Unit级别。

新的权限模型Matrix data access structure介绍_安全模型_08


可以看到更改后记录的 Owning Business Unit的Business Unit可以和记录Owner的Business Unit不一样。

新的权限模型Matrix data access structure介绍_Security Model_09

然后Owning Business Unit是BU2-2了,设置在这个BU2-2的用户testuser12登录也看不到这个记录,因为它的角色对这个表的读取权限是个人级别。但是如果给他BUPrivileges这个角色就可以看到并且编辑这个记录了,因为这个角色对Demo Entity表的权限是业务部门级。

新的权限模型Matrix data access structure介绍_Security Model_10


另外一个变化就是在 Power Platform Admin Center 给用户授予角色时候的变化(注意在经典界面维护用户角色是不会有什么变化的)。点击 Settings > Users + permissions > Users

新的权限模型Matrix data access structure介绍_Security Model_11


选择要更改角色的用户,点击 Manage security roles 按钮,可以看到右边窗口的 Business unit是可以选择的了。这时候我给他BU1这个Business Unit下的ParentChildBUPrivileges角色的话,

新的权限模型Matrix data access structure介绍_Power Platform_12


他就可以看到Owning Business Unit为BU1或者BU1下面的子Business Unit的所有记录了,当然了,他自己负责的记录依然可以看到并编辑。

新的权限模型Matrix data access structure介绍_Power Platform_13

对于创建记录时候设置Owning Business Unit为别的Business Unit,就需要用户在这个Owning Business Unit有一个角色且该角色包括了创建这个记录的权限,当然如果它有这个Owning Business Unit的上级Business Unit中的角色,且这个角色的对这个表的创建权限为上:下级业务部门或者组织级也可以,否则会报错,这是我测试的结果。比如我用testuser12创建Owning Business Unit为BU2的记录会报错,但是如果我给testuser12授予BU2这个Business Unit中的UserPrivileges角色后就不会报错了。比如我用testuser12创建Owning Business Unit为BU2-1的记录会报错,但是如果我给testuser12授予BU2这个Business Unit中的ParentChildBUPrivileges角色后就不会报错了。

如果报错下载的信息类似如下:

Exception Message: 
Principal user (Id=93143126-1705-ee11-8f6e-6045bd571496, type=8, roleCount=4, privilegeCount=269, accessMode=0, MetadataCachePrivilegesCount=9377, businessUnitId=79d19439-0405-ee11-8f6e-6045bd571496), 
is missing prvCreately_demoentity privilege (Id=08895282-263d-48a4-be73-4d037e6b22bb) 
on OTC=10736 for entity 'ly_demoentity' (LocalizedName='Demo Entity') 
in Business Unit: BU2-1 (Id=75d19439-0405-ee11-8f6e-6045bd571496). 
context.Caller=93143126-1705-ee11-8f6e-6045bd571496

新的权限模型Matrix data access structure介绍_安全模型_14


按照官方文档的说法,别的Business Unit的某个表的记录可以分派给只要有这个表的个人级别或者更高的读取权限的用户,前提是 EnableOwnershipAcrossBusinessUnits 这个设置是true,我看了下我的环境是的。可以使用工具 seanmcne/OrgDbOrgSettings 来查看,不想学习源码的话直接下载安装包,是一个托管解决方案,下载网址是:https://github.com/seanmcne/OrgDbOrgSettings/releases

新的权限模型Matrix data access structure介绍_Power Platform_15


按照官方文档的说法,还要将 RecomputeOwnershipAcrossBusinessUnits 参数设置为true (这个设置需要耗时5分钟左右,会对系统有影响请择时设置),AlwaysMoveRecordToOwnerBusinessUnit 参数设置为false。

新的权限模型Matrix data access structure介绍_Power Platform_16

新的权限模型Matrix data access structure介绍_安全模型_17


在将AlwaysMoveRecordToOwnerBusinessUnit 参数设置为false之前,如果你分派记录的话,记录的Owning Business Unit字段的值在分派的时候会自动更新为新Owner的Business Unit。设置为false之后,记录的Owning Business Unit字段的值就不会变化了,如下,虽然分派给了testuser12,这个用户的Business Unit是BU2-2,但是Owning Business Unit字段的值还是保持之前的BU2-1不变。当然,因为Owner是testuser12,他还是可以读写这个记录的,虽然这个记录的Owning Business Unit字段的值是BU2-1,testuser12用户并没有这个Business Unit负责记录的相关权限。

新的权限模型Matrix data access structure介绍_Dynamics 365_18


发现一个问题就是,如果我用 getGlobalContext.userSettings (Client API reference) 来查看自己的角色,发现会有遗漏。如下代码 Xrm.Utility.getGlobalContext().userSettings.roles 返回只有2个角色:

新的权限模型Matrix data access structure介绍_Security Model_19


但是实际上我授予了这个testuser12总共3个角色,我用高级查询查出来的结果是对的,结果如下:

新的权限模型Matrix data access structure介绍_Security Model_20


使用的FetchXml如下:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
  <entity name="role">
    <attribute name="name" />
    <attribute name="businessunitid" />
    <attribute name="roleid" />
    <order attribute="name" descending="false" />
    <link-entity name="systemuserroles" from="roleid" to="roleid" visible="false" intersect="true">
      <link-entity name="systemuser" from="systemuserid" to="systemuserid" alias="ab">
        <filter type="and">
          <condition attribute="domainname" operator="eq" value="[email protected]" />
        </filter>
      </link-entity>
    </link-entity>
  </entity>
</fetch>


这个新的权限模型为减少共享,跨BU读写数据(特别是BU不在一个BU分支上)提供了更大的可能,值得研究使用,各位如果在实际使用中碰到什么问题或者好的最佳实践欢迎共享。


标签:Matrix,Business,BU2,角色,access,Owning,权限,data,Unit
From: https://blog.51cto.com/luoyong/6442195

相关文章

  • Static 单例中 QNetworkAccessManager 的释放问题
    结论:QNetworkAccessManager以Static对象作为父对象时,需要注意在main函数return前释放,否则可能导致Qt框架内部的重复释放引发崩溃。原因:Static对象是在Main函数return后才释放的,此时,已经QApplication已失效 参考https://bugreports.qt.io/browse/QTBUG-82984htt......
  • php 备份数据库 Backup Your MySQL Database Using PHP
    代码:<?phpbackup_tables('localhost','root','root','mysql');/*backupthedbORjustatable*/functionbackup_tables($host,$user,$pass,$name,$tables='*'){ $link=mysql_connect($host,$user,$pas......
  • [ERROR] Can't find error-message file '/data/mysql/share/errmsg.sys'. Check erro
    1.MySQL5.7.21启动时报错:[ERROR]Can'tfinderror-messagefile'/data/mysql/3307/share/errmsg.sys'.Checkerror-messagefilelocationand'lc-messages-dir'configurationdirective.2.登录MySQL查看系统全局参数:mysql>showglobalvariablesl......
  • 【C#】JSON转DataTable存入数据库
    由于JSON直接转DataTable可能会存在类型丢失如下:采用读取数据库表字段类型构建DataTable///<summary>///JSON转DataTale存入数据库///</summary>///<paramname="json"></param>publicstaticvoidJsonDataTableTest(stringjson){stringsql=strin......
  • 1.datax同步多表
    #!/bin/bash./etc/profile#读库的变量r_ip="192.168.1.6"r_port="3306"r_username="root"r_password="123456"#写入库的变量w_ip="192.168.1.4"w_port="61920"w_username="star"w_password="123456&quo......
  • [转]前端-WebAPI接口-FormData对象的使用(模拟表单用于发送数据及上传文件)
    一、概述FormData对象的使用:用一些键值对来模拟一系列表单控件:即把form中所有的元素的name与value组成一个queryString。异步上传二进制文件。二、使用创建一个空对象实例。 javascript复制代码varmyform=newFormData();使用已有的表单来初始化 ht......
  • org.springframework.data.redis.RedisSystemException: Redis exception; nested exc
    springBoot+redis.程序隔一段时间会莫名其妙的报Redis的错误.报错如下:org.springframework.data.redis.RedisSystemException:Redisexception;nestedexceptionisio.lettuce.core.RedisException:java.io.IOException:Connectionresetbypeer百度得知说:是因为re......
  • 基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
    //发起获得code值链接publicfunctiondoPageGetcode(){$appid='yourappid';//修改你的appidif(!$appid){return$this->result(10008,'参数错误','');}//这里的$redirect_uri地址需要http://,跳转对于登录doPageOpenid方法,在微信公众号上面也有添加这个域名http://w......
  • springboot 引入jackson-dataformat-xml 接口都返回XML了
    springboot版本2.6.10springboot引入acksonDataformatXML后原本返回json的却返回xml<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>————————————————解......
  • [LeetCode] 1351. Count Negative Numbers in a Sorted Matrix
    Givena mxn matrix grid whichissortedinnon-increasingorderbothrow-wiseandcolumn-wise,return thenumberof negative numbersin grid.Example1:Input:grid=[[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]Output:8Explanation:Thereare......