Écriture d’un découpage de sécurité personnalisé pour SharePoint Server Search
Dernière modification : jeudi 8 décembre 2011
S’applique à : SharePoint Server 2010
Dans cet article
Implémentation de l’interface ISecurityTrimmer2
Déploiement du composant de découpage de sécurité personnalisé
Enregistrement du découpage de sécurité personnalisé
Cependant, dans certaines situations, les résultats du filtrage de sécurité intégré ne répondent pas à vos besoins et vous devez alors mettre en œuvre un filtrage de sécurité personnalisé. La Recherche SharePoint Server prend en charge le filtrage de sécurité personnalisé par le biais de l’interface ISecurityTrimmer2.
Cette rubrique fournit des informations sur l’interface ISecurityTrimmer2 et décrit les étapes requises pour utiliser un découpage de sécurité personnalisé pour la Recherche SharePoint Server :
Implémenter l’interface ISecurityTrimmer2.
Déployer le découpage de sécurité personnalisé.
Enregistrer le découpage de sécurité personnalisé.
Implémentation de l’interface ISecurityTrimmer2
Pour créer un découpage de sécurité personnalisé pour les résultats de recherche, vous devez créer un composant implémentant l’interface ISecurityTrimmer2. Cette interface fait partie de l’espace de noms Microsoft.Office.Server.Search.Query, qui se trouve dans Microsoft.Office.Server.Search.dll.
L’interface ISecurityTrimmer2 contient deux méthodes que vous devez implémenter : Initialize(NameValueCollection, SearchServiceApplication) et CheckAccess(IList<String>, IDictionary<String, Object>, IIdentity).
Méthode Initialize
La méthode Initialize est exécutée lorsque le découpage de sécurité est chargé dans le processus de travail. Elle ne s’exécute plus tant que le processus de travail n’est pas recyclé. Deux paramètres sont transmis à la méthode : un objet NameValueCollection contenant les propriétés de configuration spécifiées pour le découpage de sécurité lors de son enregistrement avec l’Application de service de recherche et un objet SearchServiceApplication représentant l’Application de service de recherche.
Vous pouvez accéder à une propriété de configuration en utilisant le nom de propriété spécifié lors de l’enregistrement du découpage de sécurité. Par exemple, le code suivant récupère la valeur d’une propriété de configuration appelée CheckLimit.
public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
{
if (staticProperties["CheckLimitProperty"] != null)
{
intCheckLimit = Convert.ToInt32(staticProperties["CheckLimitProperty"]);
}
}
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é.
Important
La méthode CheckAccess peut s’exécuter plusieurs fois pour une requête de recherche, selon le nombre de résultats transmis au découpage de sécurité.
Trois paramètres sont transmis à cette méthode : un objet IList<T> contenant les URL de chaque élément de contenu issu des résultats de recherche correspondant à la règle d’analyse, un objet IDictionary<TKey, TValue> que les responsables de l’implémentation peuvent utiliser pour suivre des informations sur plusieurs appels de la méthode CheckAccess concernant une même requête de recherche, ainsi qu’un objet IIdentity à partir duquel les responsables de l’implémentation peuvent récupérer l’identité de l’utilisateur.
La méthode CheckAccess renvoie un objet BitArray représentant un tableau de valeurs true ou false, une pour chaque URL d’élément de contenu figurant dans l’objet IList transmis comme premier paramètre de la méthode. Le moteur d’interrogation utilise ces valeurs pour appliquer un filtrage de sécurité aux résultats. Si la valeur est true, l’élément est inclus dans les résultats renvoyés. Si la valeur est false, l’élément est supprimé.
Lorsque vous implémentez la méthode CheckAccess, vous pouvez utiliser deux informations pour chaque élément afin de définir s’il faut renvoyer true ou false pour l’élément : l’identité de l’utilisateur qui a soumis la requête et l’URL de l’élément de contenu.
Récupération de l’identité de l’utilisateur
Vous pouvez récupérer l’identité de l’utilisateur en accédant au principal actuel du thread, comme expliqué ci-dessous.
IIdentity userIdentity = System.Threading.Thread.CurrentPrincipal.Identity;
Vous devez également inclure la directive d’espace de noms suivante.
using System.Security.Principal;
Vous pouvez également récupérer l’identité de l’utilisateur à partir du paramètre passedUserIdentity de la méthode CheckAccess. .
Implications en termes de performances
Un découpage de sécurité personnalisé influe sur les performances du moteur d’interrogation. Par conséquent, utilisez un découpage personnalisé uniquement si la fonction de filtrage de sécurité incluse dans la Recherche SharePoint Server ne répond pas à vos besoins.
Si vous devez utiliser un découpage de sécurité personnalisé, nous vous recommandons de définir une limite quant au nombre de vérifications d’accès réalisées par le découpage de sécurité pour une requête. Imaginons par exemple qu’un index de contenu contient un million de documents et qu’un mot-clé est commun à tous les documents. Un utilisateur exécute une requête sur l’index de contenu, mais cet utilisateur a accès uniquement au millionième document et pas aux autres. Si vous ne définissez pas de limite quant au nombre de vérifications d’accès, la méthode CheckAccess est appelée de façon répétée jusqu’à ce que le document auquel l’utilisateur a accès soit enfin renvoyé. Dans cette situation, les performances peuvent être grandement améliorées si le nombre de vérifications d’accès reste limité (200, par exemple) et si les vérifications sont interrompues une fois cette valeur atteinte, provoquant l’affichage d’un message invitant l’utilisateur à affiner sa requête pour obtenir des résultats plus précis.
Pour cela, vous suivez le nombre d’éléments vérifiés, puis générez 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. Notez que vous pouvez spécifier une chaîne dans le constructeur PluggableAccessCheckException, mais cette chaîne ne sera pas affichée à l’utilisateur final. Après que l’exception a été générée par le découpage de sécurité, le trimmerID à l’origine de l’exception sera plutôt filtré et ce résultat sera exclu des résultats de recherche. Les autres résultats de sécurité filtrés, le cas échéant, seront renvoyés et affichés dans l’interface utilisateur des résultats de recherche.
Pour voir un exemple illustrant une des méthodes d’implémentation, voir l’étape 3 dans Procédure pas à pas : utilisation d’un découpage de sécurité personnalisé pour les résultats de la recherche SharePoint Server.
Déploiement du composant de découpage de sécurité personnalisé
Une fois que vous avez créé le découpage de sécurité personnalisé, vous devez le déployer dans le Global Assembly Cache sur n’importe quel serveur associé au rôle Requête. L’étape 2 de la rubrique Procédure pas à pas : utilisation d’un découpage de sécurité personnalisé pour les résultats de la recherche SharePoint Server décrit le processus de déploiement du découpage de sécurité personnalisé dans le Global Assembly Cache.
Enregistrement du découpage de sécurité personnalisé
L’enregistrement d’un découpage de sécurité est associé à une Application de service de recherche spécifique et à une règle d’analyse.
Vous devez utiliser SharePoint 2010 Management Shell pour enregistrer un découpage de sécurité personnalisé à l’aide de l’applet de commande Windows PowerShell SPEnterpriseSearchSecurityTrimmer. Pour plus d’informations sur l’utilisation de cet outil, voir Administration des applications de service à l’aide de SharePoint 2010 Management Shell.
Le tableau suivant décrit les paramètres acceptés par l’applet de commande.
Tableau 1. Paramètres utilisés par l’applet de commande SPEnterpriseSearchSecurityTrimmer
Paramètre |
Description |
---|---|
SearchApplication |
Obligatoire. Nom de l’Application de service de recherche, par exemple « Application de service de recherche ». |
typeName |
Obligatoire. Nom fort de l’assembly de découpage de sécurité personnalisé. |
RulePath |
Obligatoire. Règle d’analyse du découpage de sécurité. |
id |
Obligatoire. Identificateur du découpage de sécurité. Cette valeur est unique. Si un découpage de sécurité est enregistré avec un identificateur déjà enregistré pour un autre découpage de sécurité, l’enregistrement du premier découpage est remplacé par celui du deuxième découpage. |
properties |
Facultatif. Paires nom-valeur spécifiant les propriétés de configuration. Le format doit être le suivant : Name1~Value1~Name2~Value~… |
Un exemple de commande de base permettant d’enregistrer un découpage de sécurité personnalisé est illustré à l’étape 2 de Procédure pas à pas : utilisation d’un découpage de sécurité personnalisé pour les résultats de la recherche SharePoint Server. L’étape 3 de la procédure pas à pas fournit un exemple spécifiant les propriétés de configuration du découpage de sécurité.