2012-01-21 11 views
6

Piszę skrypt powershel, aby wdrożyć szereg raportów do SQL Server Reporting Services 2008 R2 za pomocą usług sieciowych SSRS. Jestem całkiem zadowolony z tego podejścia, łatwo było utworzyć nowy folder wdrażania i przesłać raporty. Poniżej znajduje się fragment kodu pokazuje utworzenie folderu:Usługi raportowania 2008 usługi sieci Web interfejsu API api - jak zarządzać uprawnieniami dotyczącymi zabezpieczeń?

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

Jednak Chciałbym również, aby móc ustawić uprawnienia do folderu i to, gdzie jestem trochę zakleszczony. To, co chcę replikować, to miejsce, w którym w interfejsie internetowym wybrałem opcję zabezpieczeń folderu i dodałem użytkownika \ grupa do roli.

Pomyślałem, że można to zrobić poprzez właściwość propertyArray w wywołaniu createFolder, ale nie znalazłem jeszcze żadnych informacji w dokumentach (sondowałem istniejące właściwości i nie widzę nic istotnego), szukałem pod numerem telefonu http://msdn.microsoft.com/en-us/library/cc282788.aspx. Dotarł tam do ślepego zaułka. Pomyślałem, że może istnieć określona metoda zarządzania uprawnieniami na tym poziomie, ale nie udało się jej zidentyfikować.

Używam usług sieci Web ReportingService2005, Wiem, że istnieją również usługi sieciowe 2010, ale nie mogłem znaleźć tego, czego szukam.

Czy ktoś wie, w jaki sposób mogę dodać uprawnienia do folderów za pomocą interfejsu API usług WWW (i prawdopodobnie spójnej metody dla innych obiektów, takich jak raporty i udostępnione źródła danych)? Zakładam, że musi to być możliwe, ponieważ pozwala na to internetowy interfejs użytkownika. To nie jest pytanie typu "powershell", ale raczej interfejs API do zarządzania uprawnieniami.

Aktualizacja - Poniżej znajduje się fragment kodu, który wydaje się wykonywać zadanie. Muszę to trochę poprawić, ponieważ wygląda na to, że aktualizacja zasad musi zawierać oryginalną listę, więc muszę pobrać bieżące zasady, dodać do nich nowe zasady i zaktualizować pełną listę. Ale naprawię to później!

$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." 
}   

Odpowiedz

2

Użyj metody SetPolicies. Najpierw zdefiniuj tablicę z Policy(s) zawierającą grupę/użytkownika i wymagane role, a następnie przekaż tę tablicę do SetPolicies wraz z pozycją.

Powiązane problemy