Να συναπορήσω κι εγώ για την ερώτηση. Το tag και το authentication δεν έχουν καμμία σχέση μεταξύ τους. Ποιά είναι η πραγματική ερώτηση? Τί προσπαθείς να κάνεις?
Μία εικασία είναι ότι προσπαθείς να κρύψεις πίνακες ή πεδία ανάλογα με τα permissions που έχει ο χρήστης. Αυτό το πράγμα όμως ΔΕΝ λέγεται authentication αλλά authorization και δεν πρόκειται να βγάλεις άκρη για το ένα, ψάχνοντας για το άλλο.
Αν προσπαθείς να περιορίσεις την πρόσβαση σε πίνακες ή πεδία με permissions, μπορείς απλά να βάλεις permissions στους πίνακες και τις στήλες με την
GRANT . Από τη στιγμή που συνδέεσαι με windows authentication στη βάση, ο SQL Server ξέρει ποιός είναι ο χρήστης. Το ίδιο συμβαίνει και αν συνδέεσαι χρησιμοποιώντας SQL authentication (username/passsword) και φροντίζεις να δίνεις τα στοιχεία που δίνει ο χρήστης αντί να χρησιμοποιείς κάποια καρφωτά. Το μόνο θέμα είναι ότι .... θα σκάσουν τα query σου αν προσπαθούν να διαβάσουν από πίνακα χωρίς permissions.
Μία άλλη λύση είναι να έχεις διαφορετικές φόρμες ανά ρόλο και να εμφανίζεις στο χρήστη την φόρμα που αντιστοιχεί στον ρόλο του, αντί για μία γενική. Πρωτού πεις "μα θα φτιάχνω μία φόρμα για κάθε ρόλο!", η δουλειά είναι ελάχιστη αν έχεις φροντίσει να ξεχωρίσεις τη φόρμα από τη business λογική. Αν μάλιστα μιλάμε για WPF ή Silverlight, ο διαχωρισμός αυτός έρχεται out -of-the-box
Άλλη μία λύση είναι να κρατάς κάπου ποιός ρόλος έχει πρόσβαση σε ποιό πεδίο. Υποθέτω ότι αυτό θέλεις να πετύχεις με το tag, αν και έτσι απλά κάνεις hard-code τους ρόλους την ώρα του compile. Καλύτερη λύση είναι να κρατάς ρόλους και πεδία (ΟΧΙ control names) σε κάποιο πίνακα τον οποίο θα φορτώνεις πριν εμφανιστούν οι φόρμες σου. Μετά, κατά το φόρτωμα, κρύβεις όσα πεδία δεν έχουν το κατάλληλο permission.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos