2015-10-26 36 views

回答

0

我正在使用T-SQL來解決此問題。

我寫一個類來讓我給一個實體的名稱與所有角色的權限讀取

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace xxx.xxx.xxxx.xxx.xxx 
{ 
    public class xxx 
    { 
     public static String GetRolesForEntityTSQL(string Entity) { 
      return String.Format(@" 
        DECLARE 
          @EntityName VARCHAR(200) = '{0}', 
          @Action VARCHAR(200) = 'Read' 

        DECLARE @PrivName VARCHAR(500) = 'prv' + @Action + @EntityName 

        SELECT rb.Name, pb.Name, rb.RoleId, rb.ParentRoleId, rb.ParentRootRoleId 
        FROM RolePrivilegesBase p 
        INNER JOIN PrivilegeBase pb 
          ON p.PrivilegeId = pb.PrivilegeId 
          INNER JOIN RoleBase rb 
          ON rb.RoleId = p.RoleId 
        WHERE 
        pb.Name = @PrivName 

        ", Entity); 
     } 
    } 
} 
+0

這是否適用於CRM Online? :) –

+0

不要這麼認爲,因爲數據庫不是直接暴露在本機上 –

+0

這是一個諷刺。顯然這是行不通的。如果您希望以正確和受支持的方式使其工作,則可以使用FetchXml重寫相同的查詢。 –

0

我在XML源文件只是因爲我已經做了客戶端,登記入住,但我相信你會能夠使用Xml構建QueryExpression和C#作爲示例。

var requestXml = "<s:envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>" + 
" <s:body>" + 
" <retrievemultiple xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services'>" + 
"  <query i:type='a:QueryExpression' xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts'>" + 
"  <a:columnset>" + 
"   <a:allcolumns>false</a:allcolumns>" + 
"   <a:columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"  </a:columns></a:columnset>" + 
"  <a:criteria>" + 
"   <a:conditions>" + 
"   <a:conditionexpression>" + 
"    <a:attributename>name</a:attributename>" + 
"    <a:operator>Equal</a:operator>" + 
"    <a:values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"    <b:anytype i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + privilegeName + "</b:anytype>" + 
"    </a:values>" + 
"   </a:conditionexpression>" + 
"   </a:conditions>" + 
"   <a:filteroperator>And</a:filteroperator>" + 
"   <a:filters>" + 
"   <a:isquickfindfilter>false</a:isquickfindfilter>" + 
"  </a:filters></a:criteria>" + 
"  <a:distinct>false</a:distinct>" + 
"  <a:entityname>privilege</a:entityname>" + 
"  <a:linkentities>" + 
"   <a:linkentity>" + 
"   <a:columns>" + 
"    <a:allcolumns>false</a:allcolumns>" + 
"    <a:columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"   </a:columns>" + 
"   <a:entityalias i:nil='true'>" + 
"   <a:joinoperator>Inner</a:joinoperator>" + 
"   <a:linkcriteria>" + 
"    <a:conditions>" + 
"    <a:filteroperator>And</a:filteroperator>" + 
"    <a:filters>" + 
"    <a:isquickfindfilter>false</a:isquickfindfilter>" + 
"   </a:filters></a:conditions></a:linkcriteria>" + 
"   <a:linkentities>" + 
"    <a:linkentity>" + 
"    <a:columns>" + 
"     <a:allcolumns>false</a:allcolumns>" + 
"     <a:columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"    </a:columns>" + 
"    <a:entityalias i:nil="true">" + 
"    <a:joinoperator>Inner</a:joinoperator>" + 
"    <a:linkcriteria>" + 
"     <a:conditions>" + 
"     <a:filteroperator>And</a:filteroperator>" + 
"     <a:filters>" + 
"     <a:isquickfindfilter>false</a:isquickfindfilter>" + 
"    </a:filters></a:conditions></a:linkcriteria>" + 
"    <a:linkentities>" + 
"     <a:linkentity>" + 
"     <a:columns>" + 
"      <a:allcolumns>false</a:allcolumns>" + 
"      <a:columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"     </a:columns>" + 
"     <a:entityalias i:nil="true">" + 
"     <a:joinoperator>Inner</a:joinoperator>" + 
"     <a:linkcriteria>" + 
"      <a:conditions>" + 
"      <a:conditionexpression>" + 
"       <a:attributename>systemuserid</a:attributename>" + 
"       <a:operator>EqualUserId</a:operator>" + 
"       <a:values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + 
"      </a:values></a:conditionexpression>" + 
"      </a:conditions>" + 
"      <a:filteroperator>And</a:filteroperator>" + 
"      <a:filters>" + 
"      <a:isquickfindfilter>false</a:isquickfindfilter>" + 
"     </a:filters></a:linkcriteria>" + 
"     <a:linkentities>" + 
"     <a:linkfromattributename>roleid</a:linkfromattributename>" + 
"     <a:linkfromentityname>privilege</a:linkfromentityname>" + 
"     <a:linktoattributename>roleid</a:linktoattributename>" + 
"     <a:linktoentityname>systemuserroles</a:linktoentityname>" + 
"     </a:linkentities></a:entityalias></a:columns></a:linkentity>" + 
"    </a:linkentities>" + 
"    <a:linkfromattributename>roleid</a:linkfromattributename>" + 
"    <a:linkfromentityname>privilege</a:linkfromentityname>" + 
"    <a:linktoattributename>parentrootroleid</a:linktoattributename>" + 
"    <a:linktoentityname>role</a:linktoentityname>" + 
"    </a:entityalias></a:columns></a:linkentity>" + 
"   </a:linkentities>" + 
"   <a:linkfromattributename>privilegeid</a:linkfromattributename>" + 
"   <a:linkfromentityname>privilege</a:linkfromentityname>" + 
"   <a:linktoattributename>privilegeid</a:linktoattributename>" + 
"   <a:linktoentityname>roleprivileges</a:linktoentityname>" + 
"   </a:entityalias></a:columns></a:linkentity>" + 
"  </a:linkentities>" + 
"  <a:orders>" + 
"  <a:pageinfo>" + 
"   <a:count>0</a:count>" + 
"   <a:pagenumber>0</a:pagenumber>" + 
"   <a:pagingcookie i:nil="true">" + 
"   <a:returntotalrecordcount>false</a:returntotalrecordcount>" + 
"  </a:pagingcookie></a:pageinfo>" + 
"  <a:nolock>false</a:nolock>" + 
"  </a:orders></query>" + 
" </retrievemultiple>" + 
" </s:body>" + 
"</s:envelope>"; 
相關問題