2012-07-31 41 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

相关问题