2008-11-06 21 views
3

我需要從SQL Server Reporting Services報告中確定用戶是哪個安全組的成員。訪問報告將由成員驅動到兩個組中的一個:'report_name_summary'和'report_name_detail'。一旦用戶執行報告,我們希望能夠在'report_name_detail'組中使用他們的成員資格(或缺少成員資格)來確定是否允許「向下鑽取」。如何從SSRS報告中確定當前用戶所在的AD安全組?

我不知道有什麼方法可以訪問當前用戶的AD安全組成員資格,但是我希望能夠從報告中訪問此信息。

回答

5

您可以將自定義代碼添加到報告中。 This link有一些例子。

從理論上講,你應該能夠編寫這樣的代碼,然後使用返回值來顯示/隱藏你想要的內容。不過,您可能會遇到此方法的權限問題。

Public Function ShouldReportBeHidden() As Boolean 
Dim Principal As New System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()) 
If (Principal.IsInRole("MyADGroup")) Then 
    Return False 
Else 
    Return True 
End If 
End Function 

或者,您可以添加您的詳細報告摘要報告的報表。然後,您可以使用內置於SSRS的安全功能來限制對子報告的訪問。

+0

昨天當我意識到用自定義代碼來做到這一點很容易時,我有一個「頭巴掌」的時刻,類似於你在那裏。它非常好用,可以從外部程序集中引用/調用,也可以作爲報表屬性中的嵌入代碼。尚無權限問題。 – 2008-11-14 16:15:45

1

在Reporting Services只需使用:

Public Function IsMemberOfGroup() As Boolean 

If System.Threading.Thread.CurrentPrincipal.IsInRole("MyADGroup") Then 
    Return True 
Else 
    Return False 
End If 

End Function 

this posting

注表示:一旦報告被部署到服務器,但不是在IDE這工作。