2012-07-31 9 views
8

He creado un ensamblaje personalizado para mi proyecto SSRS.SSRS comprobar si el usuario en el grupo usando el ensamblaje personalizado

La Asamblea personalizada tiene 2 funciones, IsInGroup y 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) La función básica MyTest que devuelve una cadena 'Hola mundo' funciona perfectamente bien desde el informe utilizando la expresión =SSRS_Custom_Functions.Class1.MyTest()

2) La función IsInGroup que devuelve un valor booleano no funciona. Esto está usando el espacio de nombre System.Security.Principal para verificar si el nombre de usuario pasado a la función existe en el grupo pasado a la función. Al intentar invocar utilizando la expresión =SSRS_Custom_Functions.Class1.IsInGroup(User.User1, "MyGroupName"), el informe está rescatando a cabo con el siguiente mensaje de error:

solicitud de permiso de tipo System.Security no

He modificado los archivos de configuración en rssrvpolicy.config la ruta del archivo ReportingServices y RSPreviewPolicy.config en la ruta del archivo VisualStudio según Microsoft KB920769.

He añadido un CodeGroup que da FullTrust a mi montaje personalizado.

además, se han añadido al elemento plano de las políticas:

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

todavía estoy recibiendo el mismo mensaje de error que el anterior.

+2

Debe verificar sus registros, que estarán en .. \ Reporting Services \ LogFiles, le dará la otra información de DLL que también debe agregarse al grupo de seguridad de acceso de código con permiso de FullTrust. En esto podría ser System.Security. – Igoy

Respuesta

4

En su conjunto, debe confirmar el objeto SecurityPermission antes de usarlo.

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

En el AssemblyInfo archivo que necesita añadir namespace System.Security y

[assembly: AllowPartiallyTrustedCallers()] . 

Firmar el ensamblado con el certificado y también desplegar la misma en GAC de la máquina.

+0

Esto por sí solo no será suficiente. La solución es afirmar el objeto SecurityPermission. –

Cuestiones relacionadas