Mar.14

Generieke database Membership- en RoleProvider

Tja, handig zo’n generieke datalaag (zie: SQL & Objects in the mix, een Object Relational Mapper (ORM)) maar dan moet je er in de praktijk wel iets mee gaan doen. Welnu, hier een praktijkvoorbeeld voor de toepasbaarheid van de generieke ORM.

VisitorTracker.pngOp dit moment ben ik bezig met een zogenaamd pagecounter projectje (vrijetijdsbesteding). Niet zo maar een ding, maar een echte tracker die probeert zoveel mogelijk gegevens te verzamelen van een willekeurige bezoeker. Daar binnenkort meer over. Echter naar aanleiding daarvan had ik een beveiligd login gedeelte nodig. Dan komt al gauw de .NET MembershipProvider om de hoek kijken. Ik dacht weet je wat, misschien leuk om eens een MembershipProvider te bouwen op basis van de bovengenoemde OR Mapper.

De OR Mapper is gebaseerd op het providerfactory model in .NET. Dit betekent praktisch dat je ergens in bijv. een configuratiebestand kan vastleggen welke databaseprovider je wilt gebruiken (System.Data.SqlClient, System.Data.OleDb, System.Data.Odbc etc…) met welke connectionstring en vervolgens kan je met deze gegevens je objecten opslaan en ophalen uit elke willekeurige database, mits je hierin natuurlijk wel even vooraf de tabellen juist definieert.

De hier beschreven (en te downloaden) membership- en roleprovider hebben als voordeel dat ze niet op een bepaalde databaseprovider of database zijn gebaseerd maar generiek inzetbaar zijn voor elke willekeurige database van MySQL tot SQL Server. Dit is dus duidelijk een verbetering ten opzichte van de membership- en roleprovider beschreven in een eerder blog artikel. De providers zijn bruikbaar met ASP.NET configuratie tool zodat rollen en gebruikers kunnen worden aangemaakt via deze Microsoft interface (Menu: Project > ASP.NET Configuration). Bovendien zijn er in de toolbox een aantal controls te vinden die direct overweg kunnen met deze providers zoals de Login control.

Het maken van een Provider is een vrij simpele aangelegenheid. Er dient een class te worden gecreeerd die erft van het juiste abstracte providertype. Voor de membershipprovider is dit “MembershipProvider” en de roleprovider is dit “RoleProvider”. Vervolgens dienen simpelweg de abstracte methoden geimplementeerd te worden. In de MSDN documentatie is de benodigde informatie te vinden over de te implementeren methoden.

Om de providers te kunnen gebruiken dient de web.config van de ASP.NET 2.0 applicatie als volgt te worden gedefinieerd (voorbeeld):

<configuration>
<system.web>
<membership defaultProvider="ORMMembershipProvider">
      <providers>
        <clear/>
        <add name="ORMMembershipProvider" type="snoei.net.web.ORMMembershipProvider" ConnectionString="DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=visitortracker;USER=root;PASSWORD=root;" Provider="System.Data.Odbc" ApplicationName="VisitorTracker"/>
      </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="ORMRoleProvider">
      <providers>
        <clear/>
        <add name="ORMRoleProvider" type="snoei.net.web.ORMRoleProvider" ConnectionString="DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=visitortracker;USER=root;PASSWORD=root;" Provider="System.Data.Odbc" ApplicationName="VisitorTracker"/>
      </providers>
    </roleManager>

Onderaan dit artikel vindt je een link waarmee de source en binaries van de membership- en roleprovider kunnen worden gedownload. In de zip zitten de volgende onderdelen:

  • snoei.net.utilities.data.orm – De laatste versie van de OR Mapper
  • snoei.net.web – De assembly die zowel de membership- als roleprovider bevat.
  • web.config – Voorbeeld configuratiebestand voor het configureren van de beide providers.
  • Sources – Uiteraard de source code.
    (Voor de duidelijkheid snoei.net.web heeft dus een referentie nodig naar snoei.net.utilities.data.orm)
    De providers zijn enkel getest met MySQL maar zouden theoretisch uit de voeten moeten kunnen met elk soort database die wordt ondersteund door .NET. Mocht je problemen constateren dan hoor ik dat graag (en natuurlijk ook als je het fantastisch vindt werken ;-))

    Download RoleEnMembershipProvider.zip, Download MySQL tabelstructuur

  • Deel dit Verhaal:
    • facebook
    • twitter
    • gplus

    Over Ton Snoei

    Een enthousiaste ontwikkelaar in de allerbreedste zin van het woord.

    Het aansturen maar vooral coachen van mensen geeft me veel plezier en een leuke uitdaging. Ik houdt me graag bezig met het bouwen van software maar ook met alle anderen dingen die komen kijken bij het vak dat IT heet.

    Met als achtergrond ontwikkelaar heb ik veel ervaring met C# .NET en alles wat daarbij komt kijken. Deze kennis komt nog regelmatig goed van pas. Mijn liefde voor ontwikkeling van software is nooit verdwenen en heb mij daarom in het afgelopen jaar meer verdiept in Java, Android, iOS/iPhone/iPad (Monotouch/Xamarin), PHP en Unity 3D development. Ik noem dat altijd maar: "Lego-spelen voor grote mensen" ;-)

    Kortom van de grote lijnen naar projecten tot hands-on problem solven.

    Laat een reactie achter

    Comment