SSRS检查组中的用户是否使用自定义程序集

Jso*_*ham 8 .net c# system.security reporting-services ssrs-2008

我为我的SSRS项目创建了一个自定义程序集.

Custom Assembly有2个功能,IsInGroup并且MyTest:

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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

1)MyTest返回字符串'Hello World' 的基本函数在使用表达式的Report中完全正常工作=SSRS_Custom_Functions.Class1.MyTest()

2)IsInGroup返回布尔值的函数不起作用.这是使用System.Security.Principal命名空间来检查传递给函数的用户名是否存在于传递给函数的组中.尝试使用表达式调用它时=SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName"),报告正在退出,并显示以下错误消息:

请求System.Security类型的权限失败

我已根据Microsoft KB920769修改了rssrvpolicy.configReportingServices文件路径和RSPreviewPolicy.configVisualStudio文件路径中的配置文件.

我添加了一个CodeGroupFullTrust我的自定义组件.

以下内容已添加到策略级别元素中:

<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>
Run Code Online (Sandbox Code Playgroud)

我仍然收到与上面相同的错误消息.

gen*_*ion 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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)