2011-02-28 106 views
0

我们以前使用的是不支持的DLL(Microsoft.Crm.Application.Components.Core)检查在动态当前用户对特定实体的读取权限:的Microsoft Dynamics 4.0 SDK检查用户是否有权限

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

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

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

+1

我已经找到办法如何做到这一点使用裸SDK:http://stackoverflow.com/a/16042098/1047741 – shytikov 2013-04-17 08:41:20

回答

1

你或许可以设计一个获取或QueryExpression像这样:

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

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

+0

谢谢...我不知道如何尽管如此。你能为我指出正确的方向吗? – Jeff 2011-03-01 14:43:11

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

按FullName搜索并不是个好主意,最好使用GUID代替。 – shytikov 2013-04-16 13:26:39

+1

...但不是一个整洁,快速的解决方案。谢谢Alberto。 – 2013-05-16 15:37:11

相关问题