Partager via


Implémentation d'un fournisseur de rôles

Mise à jour : novembre 2007

La gestion des rôles ASP.NET vous permet d'utiliser facilement un certain nombre de fournisseurs différents pour vos applications ASP.NET. Vous pouvez utiliser les fournisseurs de profils disponibles dans .NET Framework ou implémenter votre propre fournisseur.

Il existe deux raisons principales pour créer un fournisseur de rôles personnalisé.

  • Vous devez stocker des informations de rôle dans une source de données non prise en charge par les fournisseurs de rôles inclus dans .NET Framework, par exemple une base de données FoxPro, une base de données Oracle ou une autre source de données.

  • Vous devez gérer les informations de rôle à l'aide d'un schéma de base de données différent de celui qui est utilisé par les fournisseurs qui accompagnent l'application .NET Framework. Les données d'autorisation qui existent déjà dans une base de données SQL Server d'une société ou site Web en sont un exemple courant.

Classes requises

Pour implémenter un fournisseur de rôles, créez une classe qui hérite la classe abstraite RoleProvider de l'espace de noms System.Web.Security. La classe abstraite RoleProvider hérite de la classe abstraite ProviderBase de l'espace de noms System.Configuration.Provider. Par conséquent, vous devez également implémenter les membres requis de la classe ProviderBase. Les tableaux suivants répertorient les propriétés et les méthodes requises que vous devez implémenter dans les classes abstraites ProviderBase et RoleProvider et fournissent une description de chacune d'elles. Pour examiner une implémentation de chaque membre, consultez le code fourni pour la rubrique Exemple d'implémentation d'un fournisseur de rôles.

Membres ProviderBase

Membre

Description

Méthode Initialize

Prend en entrée le nom du fournisseur et NameValueCollection de paramètres de configuration. Permet de définir des valeurs de propriété pour l'instance de fournisseur y compris les valeurs et les options spécifiques à l'implémentation contenues dans le fichier de configuration (Machine.config ou Web.config).

MembresRoleProvider

Membre

Description

Propriété ApplicationName

Nom de l'application utilisant les informations de rôle spécifiées dans le fichier de configuration (Web.config). Le fournisseur ApplicationName est stocké dans la source de données avec les informations utilisateur connexes et est utilisé lorsque vous demandez des informations utilisateur. Pour plus d'informations, consultez la section ApplicationName plus loin dans cette rubrique.

Cette propriété est en lecture-écriture et a la valeur par défaut ApplicationPath si elle n'est pas spécifiée explicitement.

Méthode AddUsersToRoles

Prend en entrée une liste de noms d'utilisateurs et une liste de noms de rôles et associe les utilisateurs spécifiés aux rôles spécifiés à la source de données du fournisseur ApplicationName configuré.

Vous devez lever une exception ProviderException si l'un des noms de rôles ou d'utilisateurs spécifiés n'existe pas pour le fournisseur ApplicationNameconfiguré.

Vous devez lever une exception ArgumentException si un des noms d'utilisateurs ou de rôles spécifiés est une chaîne vide et une exception ArgumentNullException si un des noms d'utilisateurs ou de rôles spécifiés est null (Nothing en Visual Basic).

Si votre source de données prend en charge les transactions, vous devez inclure chaque opération d'ajout dans une transaction, restaurer cette dernière et lever une exception si une opération d'ajout échoue.

Méthode CreateRole

Prend en entrée le nom d'un rôle et l'ajoute à la source de données du fournisseur ApplicationName configuré.

Vous devez lever une exception ProviderException si le nom de rôle spécifié existe déjà pour le fournisseur ApplicationName configuré.

Vous devez lever une exception ArgumentException si le nom de rôle spécifié est une chaîne vide, contient une virgule ou dépasse la longueur maximale autorisée par la source de données et une exception ArgumentNullException si le nom de rôle spécifié est null (Nothing en Visual Basic).

Méthode DeleteRole

Prend en entrée le nom d'un rôle et une valeur booléenne indiquant s'il faut lever une exception ou non lorsqu'il existe toujours des utilisateurs associés au rôle. Le fournisseur DeleteRole supprime le rôle spécifié de la source de données du fournisseur ApplicationName configuré.

Si le paramètre throwOnPopulatedRole est true et que le rôle identifié par le paramètre du nom de rôle a un ou plusieurs membres, levez une exception ProviderException et ne supprimez pas le rôle. Si le paramètre throwOnPopulatedRole est false, supprimez le rôle, qu'il soit vide ou non.

Lorsque vous supprimez un rôle de la source de données, vérifiez que vous faites de même pour toutes les associations entre un nom d'utilisateur et le rôle supprimé du fournisseur ApplicationName configuré.

Vous devez lever une exception ArgumentException si le nom de rôle spécifié n'existe pas, ou encore si elle est une chaîne vide. Vous devez lever une exception ArgumentNullException si le nom de rôle spécifié est null (Nothing en Visual Basic).

Méthode FindUsersInRole

Prend en entrée un nom de rôle et un nom d'utilisateur à rechercher et retourne une liste d'utilisateurs d'un rôle où le nom d'utilisateur a une correspondance avec le paramètre usernameToMatch fourni pour le fournisseur ApplicationName configuré. La prise en charge des caractères génériques est incluse selon la source de données. Les utilisateurs sont retournés dans l'ordre alphabétique en fonction de leur nom.

Il est recommandé de lever une exception ProviderException si le nom de rôle spécifié n'existe pas dans la source de données.

Méthode GetAllRoles

Retourne une liste de noms de rôles à partir de la source de données. Seuls les rôles du fournisseur ApplicationName spécifié sont récupérés.

Si aucun rôle n'existe pour le fournisseur ApplicationName configuré, vous devez retourner un tableau de chaînes sans élément.

Méthode GetRolesForUser

Prend en entrée un nom d'utilisateur et retourne les noms de rôles auxquels l'utilisateur spécifié est associé dans la source de données. Seuls les rôles du fournisseur ApplicationName configuré sont récupérés.

Si aucun rôle n'existe pour l'utilisateur spécifié du fournisseur ApplicationName configuré, vous devez retourner un tableau de chaînes sans élément.

Vous devez lever une exception ArgumentException si le nom d'utilisateur spécifié est une chaîne vide. Vous devez lever une exception ArgumentNullException si le nom d'utilisateur spécifié est null (Nothing en Visual Basic).

Méthode GetUsersInRole

Prend en entrée un nom de rôle et retourne les noms d'utilisateurs associés à un rôle de la source de données. Seuls les rôles du fournisseur ApplicationName configuré sont récupérés.

Si le nom de rôle spécifié n'existe pas pour le fournisseur ApplicationName configuré, vous devez lever une exception ProviderException.

Si aucun utilisateur n'est associé au rôle spécifié du fournisseur ApplicationNameconfiguré, vous devez retourner un tableau de chaînes sans élément.

Vous devez lever une exception ArgumentException si le nom de rôle spécifié est une chaîne vide, contient une virgule ou dépasse la longueur maximale d'un nom de rôle autorisé par votre source de données. Vous devez lever une exception ArgumentNullException si le nom de rôle spécifié est null (Nothing en Visual Basic).

Méthode IsUserInRole

Prend en entrée un nom d'utilisateur et un nom de rôle et détermine si l'utilisateur actuellement connecté est associé à un rôle de la source de données du fournisseur ApplicationName configuré.

Vous devez lever une exception ProviderException si le nom de rôle ou d'utilisateur spécifié n'existe pas pour le fournisseur ApplicationName configuré.

Vous devez lever une exception ArgumentException si le nom d'utilisateur ou de rôle spécifié est une chaîne vide et une exception ArgumentNullException si le nom d'utilisateur ou de rôle spécifié est null (Nothing en Visual Basic).

Méthode RemoveUsersFromRoles

Prend en entrée une liste de noms d'utilisateurs et une liste de noms de rôles et supprime l'association des utilisateurs spécifiés des rôles spécifiés à la source de données du fournisseur ApplicationName configuré.

Vous devez lever une exception ProviderException si l'un des noms de rôles ou d'utilisateurs spécifiés n'existe pas pour le fournisseur ApplicationName configuré.

Vous devez lever une exception ArgumentException si un des noms d'utilisateurs ou de rôles spécifiés est une chaîne vide et une exception ArgumentNullException si un des noms d'utilisateurs ou de rôles spécifiés est null (Nothing en Visual Basic).

Si votre source de données prend en charge les transactions, vous devez inclure chaque opération de suppression d'une transaction, restaurer cette dernière et lever une exception si une opération de suppression échoue.

Méthode RoleExists

Prend en entrée un nom de rôle et détermine s'il existe dans la source de données du fournisseur ApplicationName configuré.

Vous devez lever une exception ArgumentException si le nom de rôle spécifié n'existe pas, ou encore si elle est une chaîne vide. Il est recommandé de lever une exception ArgumentNullException si le nom de rôle spécifié est null (Nothing en Visual Basic).

ApplicationName

Les fournisseurs de rôle ne stockent que des informations de rôle pour chaque application. Ainsi, de nombreuses applications ASP.NET peuvent utiliser la même source de données sans entrer en conflit si des noms d'utilisateurs en double sont utilisés. Ces applications ASP.NET peuvent également utiliser la même source des données de rôle en spécifiant le même fournisseur ApplicationName.

Étant donné que les fournisseurs de rôles ne stockent que des informations de rôle pour chaque application, vous devez vérifier que le nom de l'application figurent dans votre schéma de données ainsi que dans les requêtes et les mises à jour. Par exemple, la commande suivante permet de récupérer un nom de rôle d'une base de données et vérifie que le fournisseur ApplicationName est inclus dans la requête.

SELECT Rolename FROM Roles 
  WHERE Rolename = 'Administrators' AND ApplicationName = 'MyApplication'

Sécurité des threads

Pour chaque fournisseur de rôles spécifié dans la configuration d'une application, ASP.NET crée une instance de fournisseur de rôles unique utilisée pour toutes les demandes émises par un objet HttpApplication. Par conséquent, plusieurs demandes peuvent être exécutées simultanément. ASP.NET ne garantit pas la sécurité des threads des appels à votre fournisseur. Vous devez écrire votre code de fournisseur pour que le thread soit sécurisé. Par exemple, la création d'une connexion à une base de données ou l'ouverture d'un fichier à des fins de modification doit s'effectuer dans le membre appelé, par exemple AddUsersToRoles, plutôt qu'au moment où la méthode Initialize est appelée.

Voir aussi

Concepts

Exemple d'implémentation d'un fournisseur de rôles

Sécurisation des rôles

Autres ressources

Gestion de l'autorisation à l'aide de rôles