2013-06-26 24 views
10

Czy ktoś może powiedzieć, czy istnieje zasadnicza różnica między tymi 3 rozszerzeniami, czy też wszyscy robią podobne rzeczy? Czytałem dokumenty i wydaje mi się, że jest całkiem sporo zwrotów. Zgaduję, że niektórzy po prostu oferują więcej funkcji.Flask-auth, Principal and Flask Security

Chcę dodać role użytkownika do mojej aplikacji, aby niektórzy użytkownicy mieli określone uprawnienia. np. użytkownik poziomu 1 może utworzyć 5 zasobów, użytkownik poziomu 2 może utworzyć 10 itd. Patrzyłem na toczenia własne, to nie wydaje się zbyt trudne. Chciałbym użyć dekoratora zgodnego z tym http://flask.pocoo.org/snippets/98/ czy byłyby jakieś problemy bezpieczeństwa z tym rozwiązaniem? Używam już Flask-login, więc zintegruję to z tym.

Odpowiedz

15

Flask-Auth to jedno rozwiązanie zarówno do uwierzytelniania, jak i uprawnień, ale nie widziałem, aby było używane/odwoływało się do niego w znacznym stopniu.

Flask-Principal zrobi to, co chcesz, ale jest całkiem gołe; krocząc własną nie byłoby dużo więcej pracy.

Flask-Security podciąga Flask-Login, -Principal i kilka innych rozszerzeń w bardziej spójną całość, instalując je jako zależności. Jeśli to możliwe, korzystaj z metod, które oferuje, a nie z poszczególnych rozszerzeń. Nie używałem tego, ale wygląda na to, że z tego trzeba by wiele pracy fizycznej.

W konkretnym przypadku, w którym wystarczy dodać role użytkownika, polecam trzymać się z Flask-Principal. Działa dobrze, jest utrzymywany i jest na tyle ogólny, że można go zintegrować z wszelkimi wymaganiami.

4

Na ogół wszystkie są podobne, ale niektóre mają więcej funkcji niż inne. Na przykład, Flask-Security jest bardzo ciężki z wieloma dodatkowymi funkcjami bezpieczeństwa, takimi jak dodatkowe szyfrowanie. W rzeczywistości, Flask-Security zawiera Flask-Principal jako podzbiór. Flask-Principal może używać logowania Flask dla auth, chociaż jest to tylko jedna opcja. Widać więc, że wszystkie są powiązane, ale niektóre z nich są podzbiorami lub supersetami.

Teraz w twoim konkretnym przypadku używasz Flask-Login, który jest doskonały. Jeśli potrzebujesz dodać role użytkownika, których nie obsługuje Flask-Login, polecam rozszerzenie swojego modelu użytkownika, aby dodać kolumnę Role, a następnie nadpisać decorator login_required. Jeśli spróbujesz użyć rozszerzeń takich jak Flask-Security itp., Może to być przesada w twojej sytuacji.

Jako przykład, rozszerzę swoją klasę użytkownika o pole roli. Może mieć wartości "DOWOLNY", "ADMIN" itd. DOWOLNE środki nie mają znaczenia.

class User(UserMixin): 
    def get_role(): 
     return rolename 

będę wtedy nadpisać login_required dekorator jak:

def login_required(role="ANY"): 
    def wrapper(fn): 
     @wraps(fn) 
     def decorated_view(*args, **kwargs): 

      if not current_user.is_authenticated(): 
       return current_app.login_manager.unauthorized() 

      urole = current_user.get_role() 
      if ((urole != role) and (role != "ANY")): 
        logout_user() 
        return current_app.login_manager.unauthorized()  
      return fn(*args, **kwargs) 
     return decorated_view 
    return wrapper 
Powiązane problemy