【问题标题】:Microsoft Dynamics 4.0 SDK Check If User Has PrivilegeMicrosoft Dynamics 4.0 SDK 检查用户是否有权限
【发布时间】:2011-02-28 21:50:10
【问题描述】:

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

Microsoft.Crm.Security.User.HasPrivilege(Microsoft.Crm.Security.User.Current,   
 "myentityname, AccessRights.ReadAccess);

我只需要使用受支持的 SDK(和 CrmService)来做同样的事情。

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

【问题讨论】:

标签: .net dynamics-crm dynamics-crm-4


【解决方案1】:

试试这个:

<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。
  • ...但除此之外是一个简洁、快速的解决方案。谢谢阿尔贝托。
【解决方案2】:

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

  1. 检索实体权限
  2. 加入实体roleprivilege where privilege.privilegeid = roleprivilege.privilegeid
  3. 加入实体 systemuserrole,其中 systemuserrole.roleid = roleprivileges.roleid 和 systemuserrole.systemuserid =(相关用户的 GUID)
  4. 然后遍历权限或查找权限 where privilege.name = "prvReadMyEntityName"

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

【讨论】:

  • 谢谢...不过我不知道该怎么做。你能指出我正确的方向吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多