2012-07-31 10 views
8

Stworzyłem niestandardowe Zgromadzenie dla mojego projektu SSRS.Sprawdzanie SSRS, czy użytkownik w grupie przy użyciu niestandardowego zestawu

Custom Zgromadzenie ma 2 funkcje, IsInGroup i 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) Podstawową funkcją MyTest która zwraca ciąg znaków 'Hello World' działa perfekcyjnie z raportu za pomocą wyrażenia =SSRS_Custom_Functions.Class1.MyTest()

2) Funkcja IsInGroup, która zwraca wartość boolowską, nie działa. Jest to użycie przestrzeni nazw System.Security.Principal do sprawdzenia, czy nazwa użytkownika przekazana do funkcji istnieje w grupie przekazanej do funkcji. Gdy próbuje wywołać go za pomocą wyrażenia =SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName"), raport jest ratowanie z następującym komunikatem o błędzie:

wniosek o pozwolenie typu System.security udało

mam zmodyfikowane pliki konfiguracyjne w rssrvpolicy.config Ścieżka pliku ReportingServices i RSPreviewPolicy.config w ścieżce pliku VisualStudio zgodnie z Microsoft KB920769.

Dodałem CodeGroup, który daje FullTrust do mojego zestawu niestandardowego.

Poniższa został dodany do elementu poziomie polityki:

<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> 

ja wciąż otrzymuję ten sam komunikat o błędzie, jak powyżej.

+2

Musisz sprawdzić swoje dzienniki, które będą w .. \ Reporting Services \ LogFiles, to da ci inne informacje DLL, które również muszą zostać dodane do grupy Security Access Code z uprawnieniami FullTrust. W tym może być System.Security. – Igoy

Odpowiedz

4

W swoim zespole przed użyciem należy najpierw zaznaczyć obiekt 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

W AssemblyInfo złożyć trzeba dodać namespace System.Security i

[assembly: AllowPartiallyTrustedCallers()] . 

Zaloguj zespół z certyfikatem, a także wdrożyć takie same w GAC maszyny.

+0

To samo w sobie nie wystarczy. Rozwiązaniem jest potwierdzenie obiektu SecurityPermission. –