2012-07-31 9 views
8

Ich habe eine benutzerdefinierte Assembly für mein SSRS-Projekt erstellt.SSRS überprüfen, ob Benutzer in Gruppe benutzerdefinierte Assembly verwenden

Die Custom-Versammlung hat zwei Funktionen erhalten, IsInGroup und 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) Die Grundfunktion MyTest die einen String ‚Hallo Welt‘ aus dem Bericht völlig in Ordnung, den Ausdruck =SSRS_Custom_Functions.Class1.MyTest()

mit arbeitet wieder

2) Die Funktion IsInGroup, die einen booleschen Wert zurückgibt, funktioniert nicht. Dies verwendet den Namespace System.Security.Principal, um zu überprüfen, ob der an die Funktion übergebene Benutzername in der an die Funktion übergebenen Gruppe vorhanden ist. Beim Versuch, es aufzurufen Ausdruck mit =SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName"), wird der Bericht mit der folgenden Fehlermeldung Rettung:

Antrag auf Genehmigung des Typ System.Security

fehlgeschlagen

Ich habe die Konfigurationsdateien geändert rssrvpolicy.config in den ReportingServices-Dateipfad und RSPreviewPolicy.config im VisualStudio-Dateipfad gemäß Microsoft KB920769.

Ich habe eine CodeGroup hinzugefügt, die FullTrust zu meiner benutzerdefinierten Baugruppe gibt.

Im Folgenden wurde das politische Ebene Element hinzugefügt:

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

Ich bin immer noch wie oben die gleiche Fehlermeldung bekommen.

+2

Sie müssen Ihre Protokolle prüfen, die unter .. \ Reporting Services \ LogFiles angezeigt werden. Sie erhalten dann die anderen DLLs-Informationen, die ebenfalls zur Code Access Security-Gruppe mit FullTrust-Berechtigung hinzugefügt werden müssen. In diesem könnte es System.Security sein. – Igoy

Antwort

4

In Ihrer Assembly müssen Sie zuerst das SecurityPermission-Objekt bestätigen, bevor Sie es verwenden.

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

In der Assembly Datei, die Sie namespace System.Security und

[assembly: AllowPartiallyTrustedCallers()] . 

Anmeldung die Montage mit Zertifikat hinzufügen müssen und auch das gleiche in GAC der Maschine bereitstellen.

+0

Dies alleine reicht nicht aus. Die Lösung besteht darin, das SecurityPermission-Objekt zu bestätigen. –

Verwandte Themen