2008-11-06 4 views
3

J'ai besoin de déterminer de quel groupe de sécurité un utilisateur est membre à partir d'un rapport SQL Server Reporting Services. L'accès au rapport dépendra de l'appartenance à l'un des deux groupes suivants: "nom_rappel_sommaire" et "nom_détail_détail". Une fois que l'utilisateur exécute le rapport, nous souhaitons être en mesure d'utiliser son appartenance (ou son absence d'appartenance) dans le groupe "report_name_detail" pour déterminer si un "drill down" doit ou non être autorisé. Je ne connais aucun moyen de sortir de la boîte pour accéder à l'adhésion au groupe de sécurité AD de l'utilisateur actuel, mais je suis ouvert à toutes les suggestions pour pouvoir accéder à cette information à partir du rapport.Comment puis-je déterminer les groupes de sécurité AD dans lesquels l'utilisateur actuel se trouve dans un rapport SSRS?

Répondre

5

Vous pouvez ajouter un code personnalisé à un rapport. This link a quelques exemples. En théorie, vous devriez être capable d'écrire du code comme celui-ci, puis utiliser la valeur de retour pour afficher/masquer ce que vous voulez. Cependant, vous pouvez avoir des problèmes de permissions avec cette méthode.

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 

Sinon, vous pouvez ajouter votre rapport de détail en tant que sous-état de votre rapport de synthèse. Vous pouvez ensuite utiliser la fonctionnalité de sécurité intégrée à SSRS pour restreindre l'accès à votre sous-rapport.

+0

J'ai eu un "coup de tête" hier quand j'ai réalisé à quel point il serait facile de le faire avec un code personnalisé similaire à ce que vous avez là. Cela fonctionne très bien, soit référencé/appelé depuis un assembly externe ou comme code incorporé dans les propriétés du rapport. Aucun problème d'autorisation pour le moment. –

+1

= Utilisateur! ID utilisateur affichera qui est en cours d'exécution le rapport en tant qu'expression – JsonStatham

+1

L'appel à System.Security.Principal.WindowsIdentity.GetCurrent() a échoué pour moi en raison des autorisations et du niveau de confiance à la DLL. L'utilisation de System.Threading.Thread.CurrentPrincipal.Identity à sa place a fait l'affaire: Dim Principal en tant que nouveau System.Security.Principal.WindowsPrincipal (System.Threading.Thread.CurrentPrincipal.Identity) –

1

Dans Reporting Services utilisez simplement:

Public Function IsMemberOfGroup() As Boolean 

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

End Function 

comme indiqué dans this posting

Note: Cela fonctionne une fois que le rapport est déployé sur le serveur, mais pas dans l'IDE.

Questions connexes