.net Microsoft Dynamics 4.0 SDK检查用户是否具有权限

.net Microsoft Dynamics 4.0 SDK检查用户是否具有权限,.net,dynamics-crm,dynamics-crm-4,.net,Dynamics Crm,Dynamics Crm 4,我们以前使用不受支持的dll(Microsoft.Crm.Application.Components.Core)检查Dynamics中的当前用户是否对特定实体具有读取权限: Microsoft.Crm.Security.User.HasPrivilege(Microsoft.Crm.Security.User.Current, "myentityname, AccessRights.ReadAccess); 我只需要使用支持的SDK(和CrmService)来做同样的事情 有人可以建

我们以前使用不受支持的dll(
Microsoft.Crm.Application.Components.Core
)检查Dynamics中的当前用户是否对特定实体具有读取权限:

Microsoft.Crm.Security.User.HasPrivilege(Microsoft.Crm.Security.User.Current,   
 "myentityname, AccessRights.ReadAccess);
我只需要使用支持的SDK(和CrmService)来做同样的事情


有人可以建议如何使用SDK实现这一点吗?

您可能可以这样设计一个Fetch或QueryExpression:

  • 在实体权限上检索
  • 加入实体roleprivilege,其中privilege.privilegeid=roleprivilege.privilegeid
  • 加入实体systemuserrole,其中systemuserrole.roleid=roleprivileges.roleid和systemuserrole.systemuserid=(相关用户的GUID)
  • 然后遍历特权或查找特权,其中privilege.name=“prvReadMyEntityName”

  • 请注意结果,因为您可能会从不同的角色获得不同的权限深度,但是如果您不关心深度,那么我认为就可以了。

    您可能可以设计如下的获取或查询表达式:

  • 在实体权限上检索
  • 加入实体roleprivilege,其中privilege.privilegeid=roleprivilege.privilegeid
  • 加入实体systemuserrole,其中systemuserrole.roleid=roleprivileges.roleid和systemuserrole.systemuserid=(相关用户的GUID)
  • 然后遍历特权或查找特权,其中privilege.name=“prvReadMyEntityName”
  • 只需注意结果,因为您可能从不同的角色获得不同的特权深度,但如果您不关心深度,我认为就可以了。

    尝试以下方法:

    <fetch mapping="logical" count="1000" version="1.0">
        <entity name="privilege">
            <attribute name="name" />
            <filter>
                <condition attribute="name" operator="eq" value="prvCreateINSERTYOURENTITYHERE" />
            </filter>
            <link-entity name="roleprivileges" from="privilegeid" to="privilegeid">
                <link-entity name="role" from="roleid" to="roleid">
                    <link-entity name="systemuserroles" from="roleid" to="roleid">
                        <link-entity name="systemuser" from="systemuserid" to="systemuserid">
                            <filter>
                                <condition attribute="fullname" operator="eq" value="INSERT NAME HERE" />
                            </filter>
                        </link-entity>
                    </link-entity>
                </link-entity>
            </link-entity>
        </entity>
    </fetch>
    
    
    
    试试这个:

    <fetch mapping="logical" count="1000" version="1.0">
        <entity name="privilege">
            <attribute name="name" />
            <filter>
                <condition attribute="name" operator="eq" value="prvCreateINSERTYOURENTITYHERE" />
            </filter>
            <link-entity name="roleprivileges" from="privilegeid" to="privilegeid">
                <link-entity name="role" from="roleid" to="roleid">
                    <link-entity name="systemuserroles" from="roleid" to="roleid">
                        <link-entity name="systemuser" from="systemuserid" to="systemuserid">
                            <filter>
                                <condition attribute="fullname" operator="eq" value="INSERT NAME HERE" />
                            </filter>
                        </link-entity>
                    </link-entity>
                </link-entity>
            </link-entity>
        </entity>
    </fetch>
    
    
    
    谢谢……不过我不知道怎么做。你能告诉我正确的方向吗?谢谢…不过我不知道怎么做。你能给我指一下正确的方向吗?按全名搜索不是个好主意,最好用GUID来代替……但除此之外,这是一个简洁、快速的解决方案。谢谢Alberto。按全名搜索不是一个好主意,最好使用GUID来代替……但除此之外,这是一个简洁、快速的解决方案。谢谢Alberto。我已经找到了使用bare SDK完成此任务的方法:我已经找到了使用bare SDK完成此任务的方法: