IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

[Source] MemberShipProvider et RoleProvider pour postgre (npgsql)


Sujet :

Contribuez .NET

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut [Source] MemberShipProvider et RoleProvider pour postgre (npgsql)
    Hello à tous,

    J'utilise PostGre comme base de donnée et je voulais pouvoir utiliser les contrôles .NET de gestion d'utilisateur. J'ai donc du écrire deux classes Provider (NpgsqlMembershipProvider et NpgsqlRoleProvider) qui surchagent les classes MembershipProvider et RoleProvider.

    Ces classes utilisent la librairie npsql installée lors de l'installation de PostGre.

    Je commence par la classe NpgsqlMembershipProvider. Pour commencer il est utile de lire la documentation sur la classe MembershipProvider. Et de jeter un oeil sur l'exemple d'implémentation trouvé ici.

    Après il m'as suffit de copier le code de l'exemple et de remplacer tous les accès base en utilisant les api npgsql (fichier joint NpgsqlMembershipProvider).

    De la même façon et à partir de la documentation de la classe RoleProvider et de l'exemple on obtient la classe NpgsqlRoleProvider (fichier joint NpgsqlRoleProvider).

    Il n'y a plus qu'a mettre à jour le web.config pour utiliser nos classes

    D'abord la chaîne de connection à la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <connectionStrings>
        <add name="PgsqlLocalServer" connectionString="Server=127.0.0.1;Port=5432;Database=mabdd;User Id=monuser;Password=monpwd" providerName="Ngpgsql" />
    </connectionStrings>
    Pour ajouter le membership provider dans la section system.web

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <membership defaultProvider="NpgsqlMembershipProvider">
    	<providers>
    		<add connectionStringName="PgsqlLocalServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" name="NpgsqlMembershipProvider" type="NpgsqlMembershipProvider"/>
    	</providers>
    </membership>
    et enfin on ajoute le role provider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <roleManager enabled="true" defaultProvider="NpgsqlRoleProvider">
    	<providers>
    		<add connectionStringName="PgsqlLocalServer" applicationName="/" name="NpgsqlRoleProvider" type="NpgsqlRoleProvider"/>
    	</providers>
    </roleManager>
    Comme les mots de passe (dans mon cas) ne sont pas stockés en clair, j'ai du ajouter une clé de validation (pour crypter le mot de passe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <machineKey validationKey="maclef" validation="SHA1"/>
    Il faut aussi créer les tables dans votre base PostGre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    CREATE TABLE users
    (
      applicationname text NOT NULL,
      username text NOT NULL,
      passwd text NOT NULL,
      email text NOT NULL,
      passwordquestion text,
      passwordanswer text,
      isapproved bit(1),
      islockedout bit(1),
      creationdate date,
      lastlogindate date,
      lastpasswordchangeddate date,
      lastlockedoutdate date,
      failedpasswordattemptcount integer,
      failedpasswordattemptwindowstart date,
      failedpasswordanswerattemptcount integer,
      failedpasswordanswerattemptwindowstart date,
      comments text,
      lastactivitydate date,
      CONSTRAINT users_primarykey PRIMARY KEY (applicationname, username)
    );
     
    CREATE TABLE roles
    (
      rolename text NOT NULL,
      applicationname text NOT NULL,
      CONSTRAINT roles_primarykey PRIMARY KEY (rolename, applicationname)
    );
     
    CREATE TABLE usersinroles
    (
      username text NOT NULL,
      rolename text NOT NULL,
      applicationname text NOT NULL,
      CONSTRAINT usersinrole_primarykey PRIMARY KEY (username, rolename, applicationname)
    );
    et voilà tout fonctionne bien avec les composants de l'onglets "Connexion" de VS2005.

    Logiquement si les classes NpgsqlMembershipProvider et NpgsqlRoleProvider sont compilées dans une dll avec nom fort cela devrait même pouvoir être gèrer via la console d'administration de VS2005 (pas tester).

    J'espère que cela vous sera utile

    Dès que j'ai le temps et que j'ai compris comment faire j'écrirai les classe qui permettent de surcharger la gestion du profil (via le web.config) pour PostGre. Mais la par contre la documentation expliquant cette surcharger est bcp plus hardu à lire
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [postgres+java+RPM] comment java pour postgres
    Par thief dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 18/09/2004, 17h52
  2. Hebergeur pour postgres ??
    Par elbandido dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/08/2004, 00h45
  3. la commande mysql_fetch_field pour postgre
    Par dim_italia dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/08/2004, 16h49
  4. qq'un conniat un driver OleDB pour postgres?
    Par hatake.kakashi dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/07/2004, 14h49
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo