<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Design &amp; Architecture</title><link>https://www.dotnetzone.gr:443/cs/forums/16/ShowForum.aspx</link><description>Θέματα αρχιτεκτονικής και σχεδιασμού εφαρμογών (design patterns, object orientation, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Patterns &amp; Practices Enterprise Library Tutorial : Security Application Block</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/1236.aspx</link><pubDate>Fri, 18 Feb 2005 08:32:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:1236</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/1236.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=1236</wfw:commentRss><description>&lt;h1&gt;&lt;span lang="EN"&gt;Patterns&lt;/span&gt;&lt;span lang="EN"&gt; &amp;amp; &lt;/span&gt;&lt;span lang="EN"&gt;Practices Enterprise Library Tutorial&lt;/span&gt;&lt;/h1&gt; &lt;h2&gt;&lt;span lang="EN"&gt;Security Application Block&lt;/span&gt;&lt;/h2&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Για το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Patterns&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &amp;amp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; δεν χρειάζεται να πω πολλά… Μπορείτε να βρείτε αρκετές πληροφορίες τόσο μέσα στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;DNZ&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, όσο και στα διάφορα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;sites&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που ασχολούνται με αυτό. Παρακάτω, θα σας παρουσιάσω ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;case&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; στο οποίο τα χρησιμοποίησα τόσο στην μορφή που δίνονται &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;out&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;of&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;the&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;box&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, όσο και με ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;extension&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που έφτιαξα γι αυτά.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;αποτελείται από μια σειρά &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Application Blocks&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; τα οποία ουσιαστικά συνθέτουν ένα έτοιμο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Framework&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; από το οποίο μπορεί να επωφεληθεί κάθε σύγχρονη εφαρμογή. Για παράδειγμα, αν θέλουμε να υλοποιήσουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;caching&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μηχανισμό, παρόμοιο με αυτόν του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ASP&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;NET&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; υπάρχει το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Caching Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Αν θέλουμε να υλοποιήσουμε έναν μηχανισμό για την αποθήκευση του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;configuration environment&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; της εφαρμογής, τότε υπάρχει το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Configuration Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Αντίστοιχα υπάρχουν το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Cryptography Application Block, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Application Block, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Exception Handling Application Block, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Logging and Instrumentation Application Block.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Ένα από τα ωραία με το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; είναι ότι χρησιμοποιεί τον εαυτό του για τις διάφορες λειτουργίες του. Για παράδειγμα, αν επιλέξω να χρησιμοποιήσω οποιοδήποτε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, αυτόματα θα χρησιμοποιηθεί και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Configuration Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; για να αποθηκευτούν οι πληροφορίες σχετικά με τις ρυθμίσεις μου. Αν χρησιμοποιήσω το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Caching Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και επιλέξω τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;data&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μου να &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;cach&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;άρονται σε μία βάση, τότε χρησιμοποιείται αυτόματα το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Αυτή η υλοποίηση έχει ως αποτέλεσμα έναν πολύ ορθολογικό σχεδιασμό που καθιστά το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;πολύ &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;modular&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αλλά και πολύ εύκολο σε ό,τι αφορά στην κατανόηση του τρόπου λειτουργίας τους και του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;source&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; κώδικά τους (ο οποίος, παρεμπιπτόντως, παρέχεται προς διασκέδασή σας!).&lt;/span&gt;&lt;/p&gt; &lt;h3&gt;Ένα γρήγορο &lt;span lang="EN"&gt;tutorial&lt;/span&gt;&lt;/h3&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Αφού τελειώσετε με την εγκατάσταση, έχετε τα εξής:&lt;/span&gt;&lt;/p&gt; &lt;ul style="MARGIN-TOP: 0cm; MARGIN-BOTTOM: 0cm" type="disc"&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο \&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Program Files&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Bin&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; βρίσκονται τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;DLLs&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; τα οποία συμπεριλαμβάνετε στα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;project&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; σας.&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο \&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Program Files&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;QuickStarts&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μερικές έτοιμες εφαρμογές για να δείτε πως δουλεύουν&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο \&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Program Files&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;src&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; ο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;source&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; κώδικας για να ρίξετε μια ματιά κάτω από το καπό&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Σε μια εφαρμογή που φτιάχνω αυτόν τον καιρό, χρειάστηκα το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Caching Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Configuration Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Επίσης λέω να χρησιμοποιήσω και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αλλά προς το παρόν θα σας πω για την εμπειρία μου στην χρήση του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Ένα από τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;requirements&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; της εφαρμογής είναι ότι θα πρέπει οι χρήστες να κάνουν &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Login&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; ώστε να είναι &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;authenticated&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Θα υπάρχουν τόσο εσωτερικοί χρήστες που θα χρησιμοποιούν &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Windows Forms&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, όσο και εξωτερικοί &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;anonymous &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;χρήστες που θα χρησιμοποιούν &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Web Forms&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; καθώς. Οι χρήστες θα υπάγονται σε ένα σύνολο από ρόλους, όπου ανάλογα σε ποιόν ρόλο ανήκουν θα τους επιτρέπονται ή θα τους απαγορεύονται συγκεκριμένες ενέργειες. Τα δικαιώματα για τις διάφορες ενέργειες θα πρέπει να είναι δυναμικά και πολύ πιθανόν να οριστικοποιηθούν παράλληλα με τη χρήση της εφαρμογής. Επίσης, οι κανόνες του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;authorization&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; είναι του στυλ «Την ενέργεια Α να μπορεί να την κάνει η Χ ομάδα χρηστών αλλά όχι η Ψ εκτός αν αυτός που ανήκει στην Ψ είναι ο Ζ και δεν ανήκει στην ομάδα Ω»&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Κάτι τέτοια είναι κομμένα και ραμμένα για το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; το οποίο παρέχει βοήθεια τόσο στο κομμάτι του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authentication&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, όσο και στο κομμάτι του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authorization&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Αυτός είναι ένας από τους λόγους που αποφάσισα να φτιάξω ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;proof&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;of&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;point application &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;προκειμένου να βεβαιωθώ ότι το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μου κάνει.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Για λοιπόν, θα γίνω Μαμαλάκης και θα σας δείξω ποια είναι η διαδικασία που ακολουθούμε.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;To&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; πρώτο πράγμα που κάνουμε είναι να ξεκινήσουμε τη δημιουργία της εφαρμογής μας. Φτιάχνουμε το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Solution&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; (για παράδειγμα ένα απλό &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Windows Form Application&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;) και προσθέτουμε ένα App.config (&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Assembly Configuration File&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;) αρχείο. Μέσα εκεί θα αποθηκευτούν όλες οι &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; πληροφορίες της εφαρμογής και θα το χρησιμοποιήσουν το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;για να αποθηκεύσει τις &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; πληροφορίες για τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;blocks&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που θα χρησιμοποιήσουμε.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Το δεύτερο βήμα είναι να τρέξουμε το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;configuration console&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;img height="463" src="http://www.intrip.gr/entlib/pic1.gif" width="585" border="0" /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Επιλέγουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;File&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Open&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και φορτώνουμε το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;App&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;config&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που δημιουργήσαμε προηγουμένως. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="169" src="http://www.intrip.gr/entlib/pic2.gif" width="562" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Κατόπιν&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;κάνουμε δεξί κλικ πάνω στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Application node &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;και επιλέγουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;New, Security Application Block. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="254" src="http://www.intrip.gr/entlib/pic3.gif" width="562" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Αν αυτήν την στιγμή πατήσουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;File&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Save&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; θα δούμε ότι στο φάκελο που βρίσκεται η εφαρμογή έχει δημιουργηθεί το αρχείο securityconfiguration.config το οποίο θα περιέχει όλες τις ρυθμίσεις για το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; ενώ το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;App&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;config&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; περιέχει ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;reference&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; προς αυτό. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Προσοχή γιατί εδώ είναι το πρώτο σημείο που προκαλεί αρκετούς πονοκεφάλους: Καθώς ενημερώνετε τα διάφορα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;config&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αρχεία του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Enterprise Library &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;(δεν μιλάω για το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;App&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;config&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;), θα πρέπει αμέσως να τα κάνετε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;copy&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;bin&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; φάκελο ώστε να τα βρει το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;assembly&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;b&gt; όταν θα τρέξει.&lt;/b&gt; Βέβαια, αν γράφετε σε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;C&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;# τότε μπορείτε να το κάνετε αυτό μέσα από τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;post&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;-&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;build events&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Τώρα ήρθε η ώρα για να ρυθμίσουμε το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μας. Κάθε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αποτελείται από μια σειρά &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;providers&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; οι οποίοι ομαδοποιούνται ανάλογα με το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;functionality&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που παρέχουν. Στην περίπτωση του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;έχουμε τις ομάδες &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authentication, Authorization, Profile, Roles &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;και &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Cache. &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Για κάθε μια από τις παραπάνω ομάδες υπάρχουν κάποιοι έτοιμοι &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;providers&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αλλά μπορούμε να φτιάξουμε και τους δικούς μας. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;img height="298" src="http://www.intrip.gr/entlib/pic4.gif" width="562" border="0" /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο παράδειγμά μας, το ζητούμενο είναι να γίνεται &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;authentication&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; βάσει πληροφοριών που βρίσκονται σε κάποια βάση. Στον φάκελο \&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Program Files&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;QuickStarts&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; υπάρχει ένα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;SQL script&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;άκι που προετοιμάζει τη βάση δημιουργώντας τους πίνακες και κάποια &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;stored procedures&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που θα χρειαστούν για να τους χειριστούμε. Αν έχουμε κάποιους άλλους, δικούς μας πίνακες που θέλουμε να χρησιμοποιηθούν γι αυτόν το σκοπό, θα πρέπει να επέμβουμε στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;script&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;άκι και να δημιουργήσουμε μόνο τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;stored procedures &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;αλλάζοντας τα ώστε να αναφέρονται στα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;objects&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; του δικού μας σχήματος.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;table id="table1" width="100%" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td width="458"&gt;&lt;img height="191" src="http://www.intrip.gr/entlib/pic5.gif" width="355" border="0" /&gt;&lt;/td&gt; &lt;td&gt;&lt;img height="408" src="http://www.intrip.gr/entlib/pic6.gif" width="190" border="0" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στην περίπτωση του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authentication&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; έχουμε δύο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;providers&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, ο πρώτος είναι ο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Database Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και ο δεύτερος ο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Windows Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Αν κάνουμε δεξί κλικ στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authentication node&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και προσθέσουμε τον &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Database Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, τότε αυτόματα θα προστεθεί το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Cryptography Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που χρησιμοποιείται για την κρυπτογράφηση των &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;passwords&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Application Block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; μέσω του οποίου θα γίνεται η πρόσβαση στη βάση. Έτσι λοιπόν, πριν να συνεχίσουμε, θα χρειαστεί να ρυθμίσουμε τα δύο νέα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;blocks&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;H &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ρύθμιση του &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Application Block &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;είναι πολύ εύκολη&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Ουσιαστικά το μόνο που έχουμε να κάνουμε είναι να δηλώσουμε όνομα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Database&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Server&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Sql Connection String node&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="140" src="http://www.intrip.gr/entlib/pic7.gif" width="229" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Cryptography Application block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; επιλέγουμε έναν &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Hash Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; κάνοντας δεξί κλικ, &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;New&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;HashAlgorithm Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; πάνω στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Hash Providers node&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="113" src="http://www.intrip.gr/entlib/pic8.gif" width="236" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Προσοχή, το δεύτερο σημείο που προκαλεί πονοκεφάλους: Βάλτε στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Property SaltEnabled&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; την τιμή &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;False&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Όταν το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;salt&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; είναι &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;enabled&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, τότε κατά το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;hashing &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;προστίθενται στο τέλος μερικά τυχαία &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;bytes&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; ώστε να αντιμετωπιστούν τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;dictionary attacks&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;. Στην δική μας περίπτωση όμως δεν το θέλουμε αυτό γιατί σκοπεύουμε να συγκρίνουμε το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;hash&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που βρίσκεται στη βάση με το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;hash &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;που θα παράγεται από το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;password&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που δίνει ο χρήστης.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Τώρα πλέον, μπορούμε να επιστρέψουμε στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Authentication node&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Database Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και εκεί να συνδέσουμε τον &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Database Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; με τη βάση και το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Hash Provider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που δηλώσαμε προηγουμένως. Κάνουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;save&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;copy&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; τα .&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;config&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; αρχεία στο &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;bin&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; φάκελο και είμαστε έτοιμοι να γράψουμε κώδικα!&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&amp;nbsp;&lt;img height="148" src="http://www.intrip.gr/entlib/pic9.gif" width="539" border="0" /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Αρχικά, θα πρέπει να βάλουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;reference&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; για κάθε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;block&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; που χρησιμοποιούμε. Είπαμε ότι τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;DLLs&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; βρίσκονται στο \&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Program Files&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft Enterprise Library&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;\&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Bin&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, οπότε θα πρέπει να πατήσουμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Browse&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; και να τα τσιμπήσουμε από το συγκεκριμένο φάκελο. Για το παράδειγμα μας&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;,&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; θα χρειαστούμε &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;references&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; στα:&lt;/span&gt;&lt;/p&gt; &lt;ul style="MARGIN-TOP: 0cm; MARGIN-BOTTOM: 0cm" type="disc"&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Common.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Configuration.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.Data&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security.Cryptography.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security.Database.dll&lt;/span&gt; &lt;li class="MsoNormal"&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Microsoft&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Practices&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;EnterpriseLibrary&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;.&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security.Database.Authentication.dll&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Έτσι λοιπόν ο απαιτούμενος κώδικας είναι:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Τα &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;imports&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; για να μην γράφουμε πολλά…&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Imports&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; System.Text&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Imports&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; System.Security.Principal&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Imports&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; Microsoft.Practices.EnterpriseLibrary.Security&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Σε επίπεδο κλάσης, θα χρειαστούμε τις παρακάτω μεταβλητές:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Private&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; authenticated &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Boolean&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Private&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; authenticationProvider &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; IauthenticationProvider = &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;_&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthenticationFactory.GetAuthenticationProvider("Database Provider")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Private&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; identity &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; IIdentity&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Και ο κώδικας της ρουτίνας που κάνει το authentication:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Dim&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; username &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt; = txtUserName.Text&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Dim&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; password &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt; = txtPassword.Text&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Dim&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; passwordBytes &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Byte&lt;/span&gt;() = ASCIIEncoding.ASCII.GetBytes(password)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Dim&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; credentials &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; NamePasswordCredential = _&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; New&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; NamePasswordCredential(username, passwordBytes)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;authenticated = authenticationProvider.Authenticate(credentials, identity)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;If&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; (authenticated) &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp; MessageBox.Show("User " &amp;amp; identity.Name &amp;amp; " authenticated")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Else&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;MessageBox.Show("User not authenticated")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;End&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Παρατηρώντας το παραπάνω, βλέπουμε πόσο απλό είναι να υλοποιηθεί αλλά και ότι αν αλλάξουμε μηχανισμό Authentication διαλέγοντας διαφορετικό Authentication Provider δεν θα χρειαστεί να πειράξουμε καθόλου τον κώδικά μας παρά μόνο στο GetAuthenticationProvider που θα δώσουμε ως όρισμα το όνομα του νέου provider!&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Υπάρχουν κι άλλα πράγματα που θα χρειαστεί να φτιάξουμε, όπως για παράδειγμα τις ρουτίνες που κάπως θα κάνουν management της βάσης, δηλαδή προσθήκη χρηστών και ρόλων, διαχείριση passwords, κλπ. Και πάλι δεν θα χρειαστεί να ανακαλύψουμε τον τροχό καθώς στο SecurityQuickStart (\Program Files\Microsoft Enterprise Library\QuickStarts\Security\VB\SecurityQuickStart) υπάρχει μια έτοιμη κλάση που ονομάζεται SecruityDatabaseManager.vb (παρατηρήστε το ορθογραφικό!) που παρέχει τέτοιες υπηρεσίες.&amp;nbsp; Έτσι, ο κώδικας για να προσθέσουμε έναν χρήστη είναι απλός:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;databaseManager.InsertUser(txtUserName.Text, txtPassword.Text)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Παρατηρήστε επίσης ότι ενώ καλούμε το method InsertUser παρέχοντας το password σε απλό string, αυτό αποθηκεύεται σε hashed μορφή ανάλογα με τον HashProvider που έχουμε επιλέξει και όλο το κόλπο γίνεται με τη συνεργασία του Security Application Block με το Cryptography Application Block, όπερ σημαίνει ότι δεν χρειάζεται να ασχοληθούμε με τις λεπτομέρειες της κρυπτογράφησης.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Στο κομμάτι του Authorization τώρα, θα ξεκινήσουμε πάλι από την κονσόλα για το configuration των blocks.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Δεξί κλικ στο Authorization node και New, Authorization Rule Provider. To μόνο που μένει είναι να αρχίσουμε να βάζουμε rules. Δεξί κλικ στο RuleProvider node και New, Rule και εμφανίζεται ένα παράθυρο που μας επιτρέπει να κατασκευάσουμε μια boolean έκφραση που θα αποτελέσει το rule “Print Document”. Για να καθορίσουμε που θα βρίσκονται αποθηκευμένοι οι ρόλοι, κάνουμε δεξί κλικ στο Roles node και επιλέγουμε τον ανάλογο provider που στην περίπτωσή μας είναι ο Role Database Provider. Save και δεν ξεχνάμε να κάνουμε copy τα .config αρχεία στο bin και ξαναγυρίζουμε στον κώδικα.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;img height="501" src="http://www.intrip.gr/entlib/pic10.gif" width="739" border="0" /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Σε επίπεδο κλάσης, θα πρέπει να δηλώσουμε&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Private&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; ruleProvider &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; IauthorizationProvider&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt; = _ &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Courier New"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Α&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;uthorizationFactory.GetAuthorizationProvider("RuleProvider")&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Και κατόπιν η ρουτίνα για το authorization είναι πολύ απλή:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; principal &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; IPrincipal = &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;_&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; GenericPrincipal(&lt;span style="COLOR: blue"&gt;New&lt;/span&gt; GenericIdentity(identity.Name), &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;_&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;databaseManager.GetRolesForUser(identity.Name))&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;Not&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Me&lt;/span&gt;.ruleProvider &lt;span style="COLOR: blue"&gt;Is&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Nothing&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; authorized &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Boolean&lt;/span&gt; = &lt;span style="COLOR: blue"&gt;Me&lt;/span&gt;.ruleProvider.Authorize(principal, "Print Document Rule")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;If&lt;/span&gt; (authorized) &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show("authorized")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;Else&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show("not authorized")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Από κει και πέρα, the sky is the limit… Μπορείτε για παράδειγμα να υλοποιήσετε declarative authorization με χρήση attributes. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Γυρίζοντας πίσω στο σενάριο για το οποίο χρειάστηκα αυτόν τον μηχανισμό των ρόλων, υπάρχει ένα σημείο που η λύση αυτή δεν με κάλυπτε. Αν επρόκειτο να φτιάξω ένα server side component το οποίο θα κάνει (ή όχι) κάποιες ενέργειες ανάλογα με το ποιος το καλεί, τότε δεν θα υπήρχε πρόβλημα. Ωστόσο στην περίπτωση μιας φόρμας που βρίσκεται client side, οι boolean εκφράσεις που ορίζουν ποιος ρόλος κάνει τι, είναι εκτεθειμένες μέσα στα .config αρχεία τα οποία ανοίγουν με έναν απλό editor και αυτό από άποψη &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;security &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;είναι απαράδεκτο. Γι αυτόν το λόγο χρειάστηκε να φτιάξω τον δικό μου, Custom Authorization Rule Provider ο οποίος θα ψάχνει αυτές τις εκφράσεις μέσα σε μια βάση. Ο κώδικας είναι πολύ απλός:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #d9d9d9"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;Public&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; &lt;span style="COLOR: blue"&gt;Class&lt;/span&gt; DatastoreAuthorizationProvider&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Inherits&lt;/span&gt; ConfigurationProvider&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Implements&lt;/span&gt; IAuthorizationProvider&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Private&lt;/span&gt; securityConfigView &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; SecurityConfigurationView&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Overrides&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;/span&gt; Initialize(&lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; configurationView &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; ConfigurationView)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Function&lt;/span&gt; Authorize(&lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; principal &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; IPrincipal, &lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; ruleName &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt;) &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt"&gt;_&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;As&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt; &lt;span style="COLOR: blue"&gt;Boolean&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Implements&lt;/span&gt; AuthorizationProvider.Authorize&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; principal &lt;span style="COLOR: blue"&gt;Is&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; ArgumentNullException("principal")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; ruleName &lt;span style="COLOR: blue"&gt;Is&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Or&lt;/span&gt; ruleName.Length = 0 &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; ArgumentNullException("ruleName")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecurityAuthorizationCheckEvent.Fire(principal.Identity.Name, ruleName)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; booleanExpression &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; booleanExpression = GetParsedExpression(ruleName)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; booleanExpression &lt;span style="COLOR: blue"&gt;Is&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; AuthorizationRuleNotFoundException("Authorization rule " &amp;amp; ruleName&amp;nbsp;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;amp; " not found in database.")&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; result &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Boolean&lt;/span&gt; = booleanExpression.Evaluate(principal)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; result = &lt;span style="COLOR: blue"&gt;False&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecurityAuthorizationFailedEvent.Fire(principal.Identity.Name, ruleName)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Return&lt;/span&gt; result&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Function&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Function&lt;/span&gt; GetParsedExpression(&lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; ruleName &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; BooleanExpression&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; parser &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; parser&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;Return&lt;/span&gt; parser.P***(SQLHelper.GetRuleByName(ruleName))&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Function&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Lucida Sans Typewriter Regular"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Η κλάση που έχουμε σκοπό να λειτουργήσει ως provider θα πρέπει να κάνει inherit την κλάση ConfigurationProvider και Implement το IauthorizationProvider interface. Σε αυτό καθορίζεται το method Authorize που περιέχει τη λογική του authorization: &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Τα πρώτα δύο If κάνουν ελέγχους για τα arguments. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;To SecurityAuthorizationCheckEvent.Fire χρειάζεται για να μπορεί να συνεργαστεί ο provider. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Και τώρα αρχίζουν τα ωραία… Πρέπει βάσει του ονόματος του rule να πάρουμε το ανάλογο expression. To expression αυτό είναι σε μορφή text, οπότε ο SQLHelper το τραβάει από τη βάση και ο parser το μετατρέπει σε boolean expression object. Κατόπιν, αυτό γίνεται Evaluate με παράμετρο το principal object που αντιπροσωπεύει τον χρήστη…&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Όλα είναι &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;modular &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;και δεν χρειάζεται να ασχοληθούμε ούτε με το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;parsing&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;, ούτε με το πώς γίνεται το &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;evaluation&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;…&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Το πράγμα γίνεται λίγο περισσότερο σύνθετο αν ο Custom Provider που θέλουμε να φτιάξουμε πρέπει να συνεργάζεται με την κονσόλα (για να διαβάζει settings για παράδειγμα) όπου ακολουθείται η λογική μιας designer κλάσης που συνδέει την κονσόλα με τον provider. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Το μόνο που μένει πλέον είναι να πάμε στην κονσόλα και να δηλώσουμε τον Custom Authorization Provider. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="189" src="http://www.intrip.gr/entlib/pic11.gif" width="826" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="409" src="http://www.intrip.gr/entlib/pic12.gif" width="425" border="0" /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-WEIGHT: 700; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Το τελευταίο σημείο προσοχής είναι το εξής: To παραγόμενο DLL του Custom Authorization Provider θα πρέπει να το βάλετε στο \Program Files\Microsoft Enterprise Library\Bin διαφορετικά το Enterprise Library Configuration utility, όταν θα πάει να αποθηκεύσει τα .config αρχεία, θα παραπονιέται ότι το type δεν είναι valid!&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Αυτά τα ολίγα και εισαγωγικά προς το παρόν σχετικά με τα Patterns &amp;amp; Practices Enterprise Library… &lt;/span&gt;&lt;/p&gt;</description></item></channel></rss>