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

时间:2011-02-28 21:50:10

标签: .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)来做同样的事情。

有人可以建议如何使用SDK完成此任务吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

<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>

答案 1 :(得分:1)

你可以像这样设计一个Fetch或QueryExpression:

  1. 检索实体权限
  2. 加入entity roleprivilege,其中privilege.privilegeid = roleprivilege.privilegeid
  3. 加入实体systemuserrole,其中systemuserrole.roleid = roleprivileges.roleid和systemuserrole.systemuserid =(相关用户的GUID)
  4. 然后迭代权限或查找权限,其中privilege.name =“prvReadMyEntityName”
  5. 请注意结果,因为您可能会从不同角色获得不同的权限深度,但如果您不关心深度,那么我认为这样做。