2011-02-28 63 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

相關問題