Filtrage de sécurité du catalogue de données métiers
La Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007 de Microsoft Office SharePoint Server 2007 effectue un filtrage de sécurité des résultats de la recherche au moment de la requête à l'aide des informations de sécurité récupérées au moment de l'analyse. Toutefois, cela risque de ne pas être suffisant dans certains cas, par exemple lorsque des applications principales ne peuvent pas fournir les informations de sécurité au moment de l'analyse ou lorsque vous avez besoin de ces informations à jour et qu'il n'est guère pratique d'effectuer une analyse chaque fois. Dans ce cas, le moteur de traitement de requête de recherche de contenu d'entreprise fournit une infrastructure pour un enfichage dans les modules dynamiques de filtrage de sécurité au moment de la requête où les résultats spécifiques d'une requête particulière d'un utilisateur peuvent subir un filtrage de sécurité avant d'être affichés dans les résultats de la recherche.
Le catalogue de données métiers met en œuvre l'interface CheckAccess pour offrir la prise en charge intégrée du filtrage de sécurité d'instance par entité ou de sécurité au niveau de l'instance des entités.
Le filtre de sécurité du catalogue de données métiers rend possible le filtrage de sécurité personnalisé des instances d'entité (documents de recherche) qui ont été indexées par le catalogue de données métiers avant d'être renvoyées à l'utilisateur. Il filtre le jeu de résultats (contenant les instances d'entité) au moment de l'exécution d'après les droits actuels de l'utilisateur sur les données principales, en utilisant la logique de l'application principale pour déterminer les droits de l'utilisateur. En principe, c'est l'application principale véritable qui fournit une méthode publique pour vérifier les autorisations de l'utilisateur pour une ou plusieurs instances d'entité. Les paramètres d'entrée de la méthode doivent accepter la vérification des identificateurs des objets EntityInstance et le paramètre de sortie doit renvoyer les droits d'accès de l'utilisateur actuel sous la forme d'un tableau d'entiers long (ou d'une valeur pouvant être convertie en entier long).
Dès qu'une API de ce type est disponible, les créateurs des métadonnées du catalogue de données métiers peuvent définir un TypeMethodInstance appelé AccessChecker dans le fichier de définition d'application et le mapper à l'API principale, comme pour Finder, SpecificFinder, etc. Dès qu'une instance de la méthode AccessChecker est disponible, le filtre de sécurité du catalogue de données métiers peut l'utiliser pour déterminer les droits de l'utilisateur grâce à la méthode CheckAccess.
Le filtre de sécurité du catalogue de données métiers exécute la méthode CheckAccess chaque fois que le moteur de requête renvoie des résultats de recherche qui répondent aux critères de la règle d'analyse à laquelle le filtre de sécurité du catalogue de données métiers est associé. Lorsque la méthode Entity.CheckAccess est appelée, le catalogue de données métiers exécute à son tour l'API principale décrite par l'instance de la méthode AccessChecker inscrite pour cette entité. L'API principale renvoie les droits de l'utilisateur actuel sur la ou les instances d'entité. Ils sont alors retransmis à la méthode Entity.CheckAccess, puis au filtre de sécurité, qui utilise ces informations pour filtrer les résultats avant de les afficher à l'intention de l'utilisateur.
Important
Pour une procédure complète, voir Procédure pas à pas : utilisation du découpage de sécurité du catalogue de données métiers pour réduire les résultats de la recherche.
Détails internes
Le filtre de sécurité du catalogue de données métiers mappe la méthode Microsoft.Office.Server.Search.Query.ISecurityTrimmer.CheckAccess(System.Collections.Generic.IList{System.String},System.Collections.Generic.IDictionary{System.String,System.Object}) à la méthode Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.CheckAccess(System.Object[],Microsoft.Office.Server.ApplicationRegistry.MetadataModel.LobSystemInstance) en analysant les URL fournies par le processeur de requêtes à la méthode Entity.CheckAccess après avoir déterminé l'objet LobSystem et les entités d'où provient chaque URL.
Toutefois, comme ISecurityTrimmer.CheckAccess doit renvoyer un tableau de valeurs « Oui » ou « Non », et comme la méthode Entity.CheckAccess renvoie un tableau de vecteurs de droits, le filtre de sécurité du catalogue de données métiers offre un moyen de convertir un vecteur de droits en un « Oui » ou un « Non » en lisant dans l'objet Entity une propriété spéciale appelée DisplaySearchResultRightsMaskPropertyName.
Enfin, le filtre de sécurité du catalogue de données métiers tente de limiter le nombre de vérifications d'accès effectuées pour un même appel au modèle objet Requête de recherche. Par exemple, si l'index contient un million de documents et qu'il y a un seul mot clé commun à tous ces documents, et que l'utilisateur exécute une telle requête alors qu'il n'a accès qu'au millionième document mais pas aux autres, le processeur de requêtes continue d'appeler Entity.CheckAccess jusqu'à ce que tous les documents soient testés. Cela peut prendre du temps. Par conséquent, le filtre de sécurité du catalogue de données métiers mémorise le nombre de documents explorés par le biais d'une limite personnalisée configurable (100 par défaut). Si cette limite est dépassée, une erreur de type exception se produit et un message s'affiche pour demander à l'utilisateur de réduire l'étendue de la requête.
Voir aussi
Autres ressources
Procédure pas à pas : utilisation du découpage de sécurité du catalogue de données métiers pour réduire les résultats de la recherche
AccessChecker, exemples