Spędziłem dużą część wczorajszego czytania na ten temat i wciąż mam wrażenie, że nie jestem pewien, w którą stronę pójść. Pochodzę z tła "roll your own", jeśli chodzi o uwierzytelnianie i autoryzację. Nigdy nie używaliśmy uwierzytelniania Forms, nie mówiąc już o interfejsie API Membership. Patrząc na nasz stary kod, używalibyśmy zmiennych sesji do przechwytywania/kontrolowania, czy użytkownik jest zalogowany itp. Z tym nowym projektem, który zamierzam podjąć, chcę przywrócić nas na właściwe tory z tym, co powinniśmy byli zrobić na początku, użyj narzędzi dostarczonych przez framework.Pomóż mi zdecydować, czy używać domyślnych dostawców ASP/NET/ról, czy pisać niestandardowych dostawców.
Mam już schemat bazy danych, z którym będę pracował, ale nie jest on osadzony w kamieniu; W razie potrzeby mogę wprowadzić w nim zmiany. W tym schemacie istnieje już tabela Użytkownicy, wykorzystująca liczbę całkowitą jako klucz podstawowy. Ta tabela zawiera również inne informacje, takie jak imię i nazwisko. Posiadam również klucze obce oparte na UserId na inne tabele, takie jak telefon i adres. Poniżej przedstawiam niektóre z zalet/wad, które przychodzą na myśl.
domyślnego dostawcy
Plusy
- mniej kodu.
- Możliwość korzystania ze wszystkich powiązanych elementów sterujących serwera, takich jak Login, ChangePassword.
Wady
- Niektóre kontrole nie mogą być usedful do mnie po wyjęciu z pudełka. Na przykład CreateUserWizard, będę musiał ewentualnie przechwytywać inne informacje podczas tworzenia użytkownika, takie jak informacje o telefonie i adresie do powiązanych tabel. Nie jestem pewien, czy to czyni tę kontrolę bezużyteczną dla mnie.
- Będę musiał utworzyć klucze obce w powiązanych tabelach (telefon, adres) do identyfikatora użytkownika, który jest identyfikatorem GUID w domyślnym dostawcy.
- Jeśli utworzę te ograniczenia klucza obcego, a nie wykorzystam usuwania kaskadowego; Będę musiał również usunąć powiązane wiersze w tabelach kluczy obcych. Potencjalnie trzeba użyć czegoś w rodzaju obiektu TransactionScope, aby upewnić się, że wszystko to jest operacją atomową.
klienta dostawcze
Plusy
- możliwość wykorzystania istniejących tabel schematu.
- Łatwiejsze wyodrębnianie uwierzytelniania/autoryzacji do usługi w linii.
Wady
- muszą zapewnić realizację większości/wszystkiego sam.
- Aby użyć dowolnej kontrolki, będę musiał podać ich wymaganą implementację w dostawcy.
Być może są jeszcze inne rzeczy, których jeszcze nie brałem pod uwagę, ponieważ nigdy wcześniej ich nie używałem, co sprawia, że czuję się trochę nieswojo.
Dziękuję.
Ja też to wychylam, schemat wydaje mi się bardzo ograniczony. Naprawdę nie chcę używać ich identyfikatorów GUID jako kluczy obcych. Fakt, że i tak będę musiał napisać własne ekrany admina w obrębie aplikacji (użytkownicy administratorzy mogą tworzyć innych użytkowników itd.) Sprawia, że wierzę, że korzyść z ustawienia domyślnego będzie minimalna. Zasadniczo jedynym cienkim, który tracę, jest domyślna implementacja odzyskiwania haseł itp. – e36M3
Podsuwasz kolejny dobry powód, aby nie używać domyślnych dostawców. Ostatecznie domyślny schemat po prostu dotarłby do mojej aplikacji, nie pasując do reszty mojego schematu bazy danych, a ja zawsze martwiłbym się o bycie w ukrytych pułapkach, tak jak zapisano wpisy w profilu, jak wspomniano powyżej. –
Dostawca profilu jest prawie bezwartościowy, ale całkowicie opcjonalny, więc nie utrzymałbym tego przeciwko dostawcy członkostwa. – Greg