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文件路径中的配置文件.
我添加了一个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>
Run Code Online (Sandbox Code Playgroud)
我仍然收到与上面相同的错误消息.
在程序集中,您需要先断言 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)