[英]SSRS check if user in group using Custom Assembly
我已经为我的SSRS项目创建了一个自定义程序集。
自定义程序集具有两个函数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";
}
}
}
1)返回表达式'Hello World'的基本函数MyTest
使用=SSRS_Custom_Functions.Class1.MyTest()
表达式从Report可以正常工作
2)返回布尔值的函数IsInGroup
不起作用。 这使用System.Security.Principal
命名空间检查传递给函数的用户名是否存在于传递给函数的组中。 当尝试使用表达式=SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName")
调用它时,报告将出现以下错误消息:
请求类型System.Security的许可失败
我已经修改了配置文件rssrvpolicy.config
在ReportingServices文件路径和RSPreviewPolicy.config
根据在该VisualStudio的文件路径微软KB920769 。
我添加了一个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>
我仍然收到与上述相同的错误消息。
在您的程序集中,您需要先声明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";
}
}
}
在AssemblyInfo文件中,您需要添加namespace System.Security
和
[assembly: AllowPartiallyTrustedCallers()] .
用证书签名组件,并将其部署在机器的GAC中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.