Étape 3 (facultative) : spécifier une limite configurable sur le nombre d'URL d'analyse contrôlées
Cette procédure pas à pas décrit la création, le déploiement et l'inscription d'un filtre de sécurité personnalisé pour Recherche de contenu d'entreprise dans Microsoft Office SharePoint Server 2007 à l'aide de Microsoft Visual Studio 2005.
Lorsque vous inscrivez un découpage de sécurité personnalisé à l'aide de l'utilitaire stsadm vous pouvez spécifier des propriétés de configuration facultatives avec l'opération registersecuritytrimmer. Cette procédure prend en charge la création d'un découpage de sécurité personnalisé avec des paramètres configurables.
Par exemple, vous pouvez créer un découpage de sécurité personnalisé avec une limite configurable sur le nombre d'éléments vérifiés par le découpage de sécurité. Bien que cela soit facultatif, il est recommandé d'inclure un type de limite dans votre implémentation du découpage de sécurité personnalisé. Pour plus d'informations, voir Présentation de la suppression de la sécurité personnalisée pour les résultats de la Recherche de contenu d'entreprise.
L'étape 3 décrit la création et l'inscription d'un découpage de sécurité personnalisé avec une limite configurable sur le nombre de documents vérifiés ; elle comprend les tâches suivantes :
Codage du découpage de sécurité personnalisé
Inscription du découpage de la sécurité personnalisé
Le découpage de sécurité personnalisé décrit dans cet exemple est similaire à celui décrit dans Étape 1 : créer le découpage de sécurité personnalisé et Étape 2 : déployer et inscrire le filtre de sécurité personnalisé. Néanmoins, dans ce découpage de sécurité personnalisé, nous avons inclus des opérations supplémentaires pour définir une limite dans l'implémentation et modifié la commande stsadm utilisée pour inscrire le découpage de sécurité personnalisé.
Codage du découpage de la sécurité personnalisé
Avant de commencer la tâche décrite ici, créez le projet CustomSecurityTrimmer et modifiez la classe CustomSecurityTrimmer (voir Étape 1 : créer le découpage de sécurité personnalisé.
Notes
Cette rubrique ne reproduit pas les étapes déjà indiquées aux étapes 1 et 2 ; elle décrit uniquement les tâches qui diffèrent. Pour plus d'informations sur les étapes précédentes, voir Étape 1 : créer le découpage de sécurité personnalisé et Étape 2 : déployer et inscrire le filtre de sécurité personnalisé.
Coder le filtre de sécurité personnalisé
Lorsque vous avez modifié la déclaration de classe pour implémenter l'interface ISecurityTrimmer, déclarez une variable pour la valeur limite. Procédez comme suit.
class CustomSecurityTrimmer : ISecurityTrimmer { /* Sets a default limit of 200. You can change this to a value that meets your specific requirements. */ private int intCheckLimit = 200;
Créez une méthode pour comparer le nombre d'éléments vérifiés et la limite configurée, ajoutez le code suivant.
private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks) { Object currentCount; sessionProperties.TryGetValue("currentCheckCount", out currentCount); if (currentCount == null) { sessionProperties["currentCheckCount"] = numChecks; return (true); } int currentCountInt = Convert.ToInt32(currentCount); currentCountInt += numChecks; sessionProperties["currentCheckCount"] = currentCountInt; if (currentCountInt <= intCheckLimit) { return true; } else { return false; } }
Pour terminer le code de l'exemple de découpage de sécurité personnalisé, vous devez modifier les implémentations des méthodes Initialize et CheckAccess décrites dans Étape 1 : créer le découpage de sécurité personnalisé.
Modifier les implémentations de la méthode d'interface ISecurityTrimmer
Ajoutez le code suivant à la méthode Initialize.
if (trimmerProps["CheckLimitProperty"] != null) { intCheckLimit = Convert.ToInt32(trimmerProps["CheckLimitProperty"]); }
Ce code définit la limite pour le nombre maximal de documents que le découpage de sécurité vérifiera avec la valeur d'une propriété de configuration nommée CheckLimitProperty.
Notes
Vous pouvez spécifier les propriétés de configuration lorsque vous inscrivez le découpage de sécurité.
Ajoutez le code suivant à la méthode CheckAccess, immédiatement après la déclaration.
if (!this.CheckLimit(sessionProperties, crawlURLs.Count)) { throw (new PluggableAccessCheckException("<Display Message>")); }
Ce code appelle la méthode CheckLimit. Si la limite est atteinte, cette méthode renvoie false. Dans ce cas, l'exception PluggableAccessCheckException est déclenchée et le texte spécifié dans le constructeur PluggableAccessCheckException, à la place des résultats de recherche, est affiché dans l'interface utilisateur.
Inscription du découpage de la sécurité personnalisé
Avant de commencer cette étape, vous devez déployer CustomSecurityTrimmerSample.dll sur le Global Assembly Cache (voir Étape 2 : déployer et inscrire le filtre de sécurité personnalisé. Vous pouvez ensuite inscrire le découpage de sécurité personnalisé à l'aide de l'utilitaire stsadm.
La procédure suivante montre comment inscrire un filtre de sécurité personnalisé, avec l'ID défini sur 1 pour le fournisseur de services partagés SharedServices1, appliqué au contenu situé sur des partages de fichiers pour un serveur appelé FileServer1. Elle attribue également la valeur 300 au paramètre de configuration CheckLimitProperty.
Inscrire le découpage de sécurité personnalisé avec le paramètre de configuration CheckLimitProperty
À l'invite de commandes, tapez la commande suivante :
stsadm -o registersecuritytrimmer -ssp SharedServices1 -id 1 -typeName "CustomSecurityTrimmerSample.clsCustomSecurityTrimmer, CustomSecurityTrimmerSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<token>" -rulepath file://FileServer1/* -configprops CheckLimitProperty~300
Exemple
Ci-dessous figure l'exemple de code complet pour la classe CustomSecurityTrimmerSample, décrite dans cette étape.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
//For Windows Authentication
using System.Security.Principal;
//For Forms Authenticaion
using System.Web;
using System.Collections.Specialized;
using System.Collections;
namespace CustomSecurityTrimmerSample
{
class CustomSecurityTrimmer : ISecurityTrimmer
{
private int intCheckLimit = 200;
public void Initialize(NameValueCollection trimmerProps, SearchContext searchCxt)
{
if (trimmerProps["CheckLimit"] != null)
{
intCheckLimit = Convert.ToInt32(trimmerProps["CheckLimit"]);
}
}
public BitArray CheckAccess(IList<String> crawlURLs, IDictionary<String, Object> sessionProperties)
{
BitArray retArray = new BitArray(crawlURLs.Count);
if (!this.CheckLimit(sessionProperties, crawlURLs.Count))
{
throw (new PluggableAccessCheckException("Reached Limit"));
}
//For Windows authentication, uncomment the next line:
//string strUser = WindowsIdentity.GetCurrent().Name;
//For Forms authentication, uncomment the next line:
//string strUser = HttpContext.Current.User.Identity.Name;
for (int x = 0; x < crawlURLs.Count; x++)
{
/*
Add code here to check if
strUser can access crawlURLs[x].
If so:
retArray[x] = true;
If not:
retArray[x] = false;
*/
}
return retArray;
}
private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks)
{
Object currentCount;
sessionProperties.TryGetValue("currentCheckCount", out currentCount);
if (currentCount == null)
{
sessionProperties["currentCheckCount"] = numChecks;
return (true);
}
int currentCountInt = Convert.ToInt32(currentCount);
currentCountInt += numChecks;
sessionProperties["currentCheckCount"] = currentCountInt;
if (currentCountInt <= intCheckLimit)
{
return true;
}
else
{
return false;
}
}
}
}
Voir aussi
Référence
Microsoft.Office.Server.Search.Query.ISecurityTrimmer
Microsoft.Office.Server.Search.Query.PluggableAccessCheckException
Autres ressources
Présentation de la suppression de la sécurité personnalisée pour les résultats 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
Étape 1 : créer le découpage de sécurité personnalisé
Étape 2 : déployer et inscrire le filtre de sécurité personnalisé