2012-01-21 11 views
6

Estoy escribiendo un script powershell para implementar una serie de informes en SQL Server Reporting Services 2008 R2 utilizando los servicios web de SSRS. Estoy muy contento con el enfoque, fue fácil crear una nueva carpeta de implementación y cargar los informes. Lo que sigue es un fragmento de código que muestra la creación de una carpeta:Servicios de informes 2008 R2 servicios web api: ¿cómo administro los permisos de seguridad?

$reportServerUri = "http://{0}/ReportServer/ReportService2005.asmx" -f $reportServerName 
$proxy = New-WebServiceProxy -Uri $reportServerUri -Namespace SSRS.ReportingService2005 -Credential $credential 
#Dont currently set any properties so set empty array of properties 
$propertyArray = @() 
$warnings = $proxy.CreateFolder($folderName, $folderParent, $propertyArray) 

Sin embargo, también le gustaría ser capaz de establecer permisos en la carpeta y aquí es donde estoy un poco atascado. Lo que quiero replicar es dónde, desde la interfaz de usuario web, seleccionaría la opción de seguridad de la carpeta y agregaría un grupo de usuarios contra un rol.

Pensé que esto podría hacerse a través de propertyArray en la llamada a createFolder pero todavía no he podido encontrar ninguna información en los documentos (probé propiedades existentes y no puedo ver nada relevante), he estado buscando en http://msdn.microsoft.com/en-us/library/cc282788.aspx como guía. Así que llegó a un callejón sin salida allí. Pensé que podría haber un método específico para administrar los permisos en este nivel, pero no he podido identificar uno.

Estoy utilizando los servicios web ReportingService2005, sé que también hay servicios web 2010 pero tampoco he podido encontrar lo que estoy buscando allí.

¿Alguien sabe cómo agrego permisos a las carpetas usando la API de servicios web (y presumiblemente un método consistente para otros objetos como informes y fuentes de datos compartidos)? Supongo que debe ser posible ya que la interfaz de usuario web te permite hacerlo. No se trata de una pregunta de Powershell, sino de la API que se debe usar para administrar los permisos.

Actualización - A continuación se muestra el fragmento de código que parece hacer el trabajo. Necesito refinar esto un poco, ya que parece que la actualización de las políticas debe incluir la lista original, así que necesito obtener las políticas actuales, agregar mi nueva política a esto y actualizar con la lista completa. ¡Pero lo arreglaré más tarde!

$Policies = $global:ssrsproxy.GetPolicies($ItemPath, [ref] $InheritsFromParent) 
$PolicyAlreadyExists = $false 

$Policies | Foreach-Object{ if ($_.GroupUserName -eq $GroupUserName)  
    {$PolicyAlreadyExists = $true} } 
$Policies | Foreach-Object{ $_ | get-member } 

    if ($PolicyAlreadyExists){ 
     "Policy already applied." 
    } else {   
     $Policy = New-Object SSRS.ReportingService2005.Policy 
     $Policy.GroupUserName = $GroupUserName  
     $Roles = @() 
     $Role = New-Object SSRS.ReportingService2005.Role 
     $Role.Name = $RoleName 
     $Roles += $Role 
     $Policy.Roles = $Roles    

     $global:ssrsproxy.SetPolicies($ItemPath, $Policy) 
     "Policy applied." 
}   

Respuesta

2

Utilice el método SetPolicies. Primero defina una matriz de Policy(s) que contenga el grupo/usuario y los roles requeridos, luego pase esta matriz a SetPolicies junto con el elemento.

Cuestiones relacionadas