2012-07-31 65 views
8

我已爲我的SSRS項目創建了定製組裝。SSRS檢查組中是否使用定製組裝的用戶

自定義大會得到了2個功能,IsInGroupMyTest

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Security.Principal; 

namespace SSRS_Custom_Fuctions 
{ 
    public class Class1 
    { 

     public static bool IsInGroup(string user, string group) 
     { 
      using (var identity = new WindowsIdentity(user)) 
      { 
       var principal = new WindowsPrincipal(identity); 
       return principal.IsInRole(group); 
      } 
     } 

     public static string MyTest() 
     { 
      return "Hello World"; 
     } 
    } 
} 

1)基本功能MyTest它返回一個字符串「你好世界」從報告工作完全正常使用表達式=SSRS_Custom_Functions.Class1.MyTest()

2)返回布爾值的函數IsInGroup不起作用。這是使用System.Security.Principal命名空間來檢查傳遞給該函數的用戶名是否存在於傳遞給該函數的組中。當嘗試使用表達式=SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName")調用它,該報告是救助與以下錯誤消息:類型System.Security許可

請求失敗

我已經修改了配置文件rssrvpolicy.config在根據Microsoft KB920769,VisualStudio文件路徑中的ReportingServices文件路徑和RSPreviewPolicy.config

我添加了一個CodeGroup,它給我的自定義程序集提供了FullTrust

下已被添加到政策層面的元素:

<CodeGroup class="UnionCodeGroup" 
      version="1" 
      PermissionSetName="FullTrust" 
      Name="SSRS_Custom_Fuctions" 
      Description="Code group for my data processing extension"> 

<IMembershipCondition class="UrlMembershipCondition" 
         version="1" 
         Url="C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\SSRS_Custom_Fuctions.dll"/> 
</CodeGroup> 

我仍然得到同樣的錯誤信息如上。

+2

您需要檢查日誌,該日誌位於.. \ Reporting Services \ LogFiles中,它會爲您提供其他DLL信息,這些信息也需要通過FullTrust權限添加到Code Access Security組。 在這可以是System.Security。 – Igoy 2012-08-03 10:47:26

回答

4

在您的程序集中,您需要在使用它之前首先斷開SecurityPermission對象。

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Security.Principal; 

namespace SSRS_Custom_Fuctions 
{ 
    public class Class1 
    { 

     public static bool IsInGroup(string user, string group) 
     { 

     System.Security.Permissions.SecurityPermission sp = new System.Security.Permissions.SecurityPermission(System.Security.Permissions.PermissionState.Unrestricted); 
     sp.Assert(); 

      using (var identity = new WindowsIdentity(user)) 
      { 
       var principal = new WindowsPrincipal(identity); 
       return principal.IsInRole(group); 
      } 
     } 

     public static string MyTest() 
     { 
      return "Hello World"; 
     } 
    } 
} 
1

在集信息文件,你需要添加namespace System.Security

[assembly: AllowPartiallyTrustedCallers()] . 

簽署證書的裝配,也部署在機器的GAC相同。

+0

這對它本身是不夠的。解決方案是斷言SecurityPermission對象。 – 2012-08-06 08:06:46

相關問題