2011-06-28 14 views
5

możesz myśleć, że to pytanie powinno być na Meta SO, ale nie powinno, ponieważ jest to zasadniczo o ASP.Net MVC, ale technika, którą chcę wdrożyć jest już zaimplementowana w SO.Jak wdrożyć uprawnienia użytkownika oparte na reputacji, takie jak SO?

Chcę, aby użytkownicy mieli siłę, podczas gdy zdobywali większą reputację, tak jak robimy to w StackOverflow, a moje pytanie brzmi: jak zaprojektować system uwierzytelniania użytkownika? Czy możemy polegać na wbudowanym uwierzytelnianiu formularzy? i jak zarządzać jakie linki (w zależności od reputacji), które mają być wyświetlane dla użytkownika, a co nie?

Myślę, że nie możemy używać tu ról, więc nie otrzymujemy 1000 ról, prawda? ale możemy użyć tylko 2 ról (administrator, użytkownik).

[Edit]:
myślę, że lepiej jest tworzyć własne tabeli użytkowników zamiast w zależności od uwierzytelniania formularzy, a więc mogę dodać pole reputacji (i innych pól) do tabeli użytkowników i śledzić go tak jak powiedziałeś. BTW @MartinHN, Wiem o rozmowie z if, ale moje pytanie jest tam mądrzejszy sposób radzenia sobie z takimi kwestiami?

+0

Wyobrażam sobie, że SO obsługuje "uprawnienia reputacyjne" wewnętrznie, a każdy normalny użytkownik to tylko "Użytkownik", ale nigdy nie widziałem źródła, więc jest to WAG. –

+0

Czy mylisz "uwierzytelnianie" i "autoryzację"? StackExchange używa identyfikatora OpenID do uwierzytelniania, który nie określa twoich uprawnień. –

+0

Nie, nie jestem, chodzi o to, że chciałem znaleźć system, który może sobie pozwolić zarówno na łatwość konserwacji/rozbudowę w przyszłości. –

Odpowiedz

5

Można utworzyć prosty system reguł. Każdy użytkownik ma przypisaną ocenę reputacji. Następnie, przy użyciu action filter można kontrolować dostęp do funkcji w systemie:

public class SomeController : IController 
{ 
    ... 
    [ReputationNeeded(Reputations.CanVoteDown)] // your custom action filter 
    [HttpPost] 
    public ActionResult VoteDown(...) 
    { /* */ } 
} 

Powodzenia!

+0

+1 Dziękuję bardzo, to część fajnych rzeczy, które chciałem. –

+0

Kolejne pytanie, jak uzyskać dostęp do obiektu użytkownika (a następnie reputacji) w klasie filtru akcji? Mam na myśli to nie jest częścią kontekstu, jak obejść to? –

+1

Sądzę, że jest wiele sposobów. Jeden jest omawiany tutaj: http://stackoverflow.com/questions/5758611/mvc3-action-filter-using-database-ef-4-1-dbcontext-ninject. –

3

Zarządzanie reputacją użytkownika i to, do czego ma dostęp (mierzony reputacją), nie powinno być częścią samego mechanizmu uwierzytelniania, IMHO.

W Internecie korzystasz przede wszystkim z uwierzytelniania za pomocą formularzy, a po uwierzytelnieniu możesz złożyć wniosek o reputację i zamknąć obszary, jeśli użytkownik nie ma wystarczającej reputacji.

Nie chcę, aby ta funkcja była częścią systemu uwierzytelniania. Pozwoliłbym użytkownikom uwierzytelniać, a następnie renderować odpowiednie widoki dla dowolnego użytkownika.

Wymień główne zmiany nawigacji w zależności od reputacji. Owijasz elementy paska nawigacji, które wymagają więcej niż 1000 powtórzeń. z instrukcją if i nie wyświetlaj go, jeśli użytkownik ma mniej niż 1000.

+0

+1 Informacyjny. –

Powiązane problemy