簡體   English   中英

SSRS使用自定義程序集檢查用戶是否在組中

[英]SSRS check if user in group using Custom Assembly

我已經為我的SSRS項目創建了一個自定義程序集。

自定義程序集具有兩個函數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)返回表達式'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM