Présentation de la suppression de la sécurité personnalisée pour les résultats de la Recherche de contenu d'entreprise
Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007 effectue la suppression de la sécurité des résultats de la recherche au moment de la requête. Les résultats sont supprimés en fonction de l'identité de l'utilisateur qui soumet la requête, en utilisant les informations de sécurité obtenues par l'analyseur. Pour plus d'informations, voir Modèle de sécurité de la recherche de contenu d'entreprise.
Il peut cependant exister certains scénarios dans lesquels les résultats de la suppression de la sécurité intégrés ne sont pas suffisants pour vos besoins et vous pouvez être amenés à implémenter une fonction de la suppression de la sécurité personnalisée. Recherche de contenu d'entreprise prend en charge la fonction de suppression de la sécurité personnalisée dans l'interface ISecurityTrimmer.
Cette rubrique fournit des informations sur l'interface ISecurityTrimmer et décrit les trois étapes qui permettent d'utiliser le découpage de la sécurité personnalisé pour Recherche de contenu d'entreprise:
Implémentation de l'interface ISecurityTrimmer
Déploiement du découpage de la sécurité personnalisé
Enregistrement du découpage de la sécurité personnalisé
Implémentation de l'interface ISecurityTrimmer
Pour créer un découpage de la sécurité personnalisé pour les résultats Recherche de contenu d'entreprise, vous devez créer un composant qui implémente l'interface ISecurityTrimmer. Cette interface fait partie de l'espace de noms Microsoft.Office.Server.Search.Query, situé dans Microsoft.Office.Server.Search.dll.
L'interface ISecurityTrimmer contient deux méthodes que vous devez implémenter : Initialize et CheckAccess.
Méthode Initialize
La méthode Initialize est exécutée lorsque le découpage de la sécurité est chargé dans le processus de traitement et ne se réexécute pas tant que le processus de traitement n'est pas recyclé. Deux paramètres sont passés dans la méthode, un objet System.Collections.Specialized.NameValueCollection contenant les propriétés de configuration spécifiées pour le découpage de sécurité et un objet SearchContext représentant le service de recherche du fournisseur de services partagés.
Vous devez spécifier les propriétés de la configuration lorsque vous enregistrez le découpage de sécurité personnalisé (ce point sera présenté ultérieurement dans la présente rubrique).
Vous pouvez accéder à une propriété de configuration en utilisant le nom de la propriété spécifié au moment de l'enregistrement du découpage de la sécurité. Par exemple, le code suivant extrait la valeur d'une propriété de configuration nommée CheckLimit.
public void Initialize(NameValueCollection trimmerProperties, SearchContext srchContext)
{
int intCheckLimit = Convert.ToInt32(trimmerProperties["CheckLimit"]);
}
Pour prendre connaissance d'un exemple de code qui montre l'implémentation de la méthode Initialize, voir Étape 1 : créer le découpage de sécurité personnalisé et Étape 3 (facultative) : spécifier une limite configurable sur le nombre d'URL d'analyse contrôlées dans Procédure pas à pas : utilisation d'un découpage de sécurité par défaut pour les résultats de recherche.
Méthode CheckAccess
La méthode CheckAccess est exécutée au moins une fois, à chaque fois qu'une requête de recherche renvoie des résultats qui correspondent à la règle d'analyse associée au découpage de sécurité.
Notes
La méthode CheckAccess peut s'exécuter plusieurs fois pour une requête de recherche, en fonction du nombre de résultats passés au découpage de sécurité.
Deux paramètres sont passés dans cette méthode : un objet System.Collections.Generic.IList contenant les URL de chaque élément de contenu des résultats de la recherche qui correspondent à la règle d'analyse et un objet System.Collections.Generic.IDictionnary que les implémenteurs peuvent utiliser pour suivre les informations dans plusieurs appels de méthode CheckAccess pour la même requête de recherche.
La méthode CheckAccess renvoie un objet System.Collections.BitArray représentant un tableau de valeurs true ou false, un pour chaque URL d'élément de contenu dans l'objet IList passé comme premier paramètre de la méthode. Le moteur de requête utilise ces valeurs pour effectuer la suppression de la sécurité des résultats. Si la valeur correspond à true, l'élément est inclus dans les résultats renvoyés ; si elle correspond à false, l'élément est supprimé.
Lors de l'implémentation de la méthode CheckAccess, vous pouvez utiliser deux informations pour chaque élément afin de déterminer si true ou false doit être retourné pour l'élément : l'identité de l'utilisateur qui a soumis la requête et l'URL de l'élément de contenu.
Extraction de l'identité utilisateur
Vous pouvez extraire l'identité de l'utilisateur qui a soumis la requête, en procédant de deux façons, selon l'authentification qui est configurée pour le site SharePoint.
Si le site est configuré pour utiliser l'authentification Windows, le code suivant extrait le nom d'utilisateur.
string strUser = WindowsIdentity.GetCurrent().Name;
Vous devez également inclure l'instruction suivante pour l'espace de noms.
using System.Security.Principal;
Si le site est configuré pour utiliser des formulaires ou une authentification personnalisée, le code suivant extrait le nom d'utilisateur.
string strUser = HttpContext.Current.User.Identity.Name;
Vous devez également inclure l'instruction suivante pour l'espace de noms.
using System.Web;
Notes
Vous devez également avoir une référence dans votre projet pour System.Web.
Pour prendre connaissance d'un code exemple qui montre une implémentation de base de la méthode CheckAccess, voir Étape 1 : créer le découpage de sécurité personnalisé dans Procédure pas à pas : utilisation d'un découpage de sécurité par défaut pour les résultats de recherche.
Implications en termes de performances
Un découpage de la sécurité personnalisé a des conséquences sur les performances du moteur de requête et il est donc conseillé d'utiliser un découpage personnalisé uniquement si la fonctionnalité de suppression de la sécurité incluse avec Recherche de contenu d'entreprise ne répond pas à vos besoins.
Si vous devez utiliser un découpage de sécurité personnalisé, il est recommandé de limiter le nombre de contrôles d'accès que le découpage effectue pour une même requête. Par exemple, imaginez un scénario dans lequel l'index de contenu contient un million de documents et un mot-clé commun à l'ensemble des documents. Un utilisateur exécute une requête sur l'index de contenu, mais cet utilisateur peut accéder uniquement au millionième document, et non aux autres. Si le nombre de contrôles d'accès n'est pas limité, la méthode CheckAccess est appelée sans cesse jusqu'à ce que le document auquel l'utilisateur a accès soit finalement retourné. Dans ce scénario, les performances seraient bien plus élevées si le nombre de contrôles d'accès était limité, par exemple à 200, et si les contrôles d'accès étaient arrêtés et un message envoyé à l'utilisateur pour lui demander d'affiner sa requête afin d'obtenir de meilleurs résultats.
Pour cela, vous devez suivre le nombre d'éléments contrôlés, puis générer une exception PluggableAccessCheckException. La classe PluggableAccessCheckException fournit un constructeur avec un paramètre dans lequel vous pouvez spécifier une chaîne contenant un message pour l'utilisateur. Le moteur de requête renvoie ensuite ce texte à la place des résultats en réponse à la requête de la recherche.
Étape 3 (facultative) : spécifier une limite configurable sur le nombre d'URL d'analyse contrôlées dans Procédure pas à pas : utilisation d'un découpage de sécurité par défaut pour les résultats de recherche contient un exemple qui illustre l'une des façons de procéder à cette implémentation.
Déploiement du composant de découpage de la sécurité personnalisé
Après avoir créé le découpage de la sécurité personnalisé, vous devez le déployer dans le Global Assembly Cache sur un serveur dans le rôle Requête. Étape 2 : déployer et inscrire le filtre de sécurité personnalisé décrit les étapes qui permettent de déployer le découpage de sécurité personnalisé dans le Global Assembly Cache.
Enregistrement du découpage de la sécurité personnalisé
Un enregistrement du découpage de la sécurité personnalisé est associé à un fournisseur de services partagés et à une règle d'analyse. Si vous souhaitez utiliser le découpage de la sécurité avec plusieurs fournisseurs de services partagés, vous devez l'enregistrer pour chaque fournisseur de services partagés et également pour chaque règle d'analyse, auxquels il est associé.
L'utilitaire stsadm permet d'enregistrer le découpage de sécurité en spécifiant l'opération registersecuritytrimmer. Le tableau qui suit décrit les paramètres que prend l'opération.
Paramètre | Description |
---|---|
ssp |
Obligatoire. Nom du fournisseur de services partagés ; par exemple, ServicesPartagés1. |
id |
Obligatoire. ID du découpage de sécurité. Cette valeur est unique ; si un découpage de sécurité est enregistré avec un ID déjà enregistré pour un autre découpage de la sécurité, l'enregistrement du premier découpage est remplacé par celui du second découpage. |
typeName |
Obligatoire. Nom fort de l'assembly du découpage de la sécurité personnalisé. |
rulepath |
Obligatoire. Règle d'analyse du découpage de sécurité. |
configprops |
Facultatif. Paires nom-valeur qui spécifient les propriétés de configuration. Doit respecter le format suivant : Nom1~Valeur1~Nom2~Valeur~… |
Un exemple d'une commande de base permettant d'enregistrer un découpage de sécurité personnalisé est montré dans Étape 2 : déployer et inscrire le filtre de sécurité personnalisé. Étape 3 (facultative) : spécifier une limite configurable sur le nombre d'URL d'analyse contrôlées montre un exemple qui spécifie les propriétés de configuration pour le découpage de sécurité.
Voir aussi
Autres ressources
Modèle de sécurité de la recherche de contenu d'entreprise
Procédure pas à pas : utilisation d'un découpage de sécurité par défaut pour les résultats de recherche