2013-06-26 7 views
10

3 가지 확장 기능간에 근본적인 차이점이 있는지 또는 비슷한 기능을 모두 수행 할 수 있는지 알 수 있습니까? 나는 문서를 읽고 있었고 거기에는 많은 크로스 오버가있는 것으로 보인다. 좀 더 많은 기능을 제공하는 것으로 추측하고 있습니다.Flask-auth, Principal 및 Flask Security

특정 사용자가 특정 권한을 갖도록 내 앱에 사용자 역할을 추가하고 싶습니다. ie level1 사용자는 5 개의 리소스를 생성 할 수 있고 level2 사용자는 10 등을 만들 수 있습니다. 내 자신을 굴러 다니는 것을 보았습니다. 너무 까다로워 보이지 않습니다. 이 http://flask.pocoo.org/snippets/98/의 라인을 따라 데코레이터를 사용할 때이 솔루션에 보안 문제가 있습니까? 나는 Flask-login을 사용하고 있으므로 이것을 통합 할 것입니다.

답변

15

Flask-Auth는 인증 및 권한 모두에 대한 단일 솔루션이지만 사용/참조가 많지는 않습니다.

플라스크 - 교장 선생님이 원하는대로 해드립니다.하지만 예쁜 뼈입니다. 너 자신을 굴리는 것은 훨씬 더 많은 일이 아닐 것이다.

Flask-Security는 Flask-Login, -Principal 및 일부 다른 확장을보다 일관성있는 전체로 롤업하여 종속 항목으로 설치합니다. 가능한 경우 개별 확장 기능에서 제공하는 방식보다는 제공하는 방식을 사용하십시오. 나는 그것을 사용하지는 않았지만 많은 수작업이 필요했다.

사용자 역할을 추가하기 만하면되는 특수한 용도로 Flask-Principal을 사용하는 것이 좋습니다. 그것은 잘 작동하고, 유지되며, 당신이 가지고있는 요구 사항과 통합하기에 충분히 일반적입니다.

4

일반적으로 모두 비슷하지만 일부는 다른 것보다 많은 기능을 가지고 있습니다. 예를 들어, Flask-Security는 암호화와 같은 추가 보안 기능이 많아 매우 무겁습니다. 사실 Flask-Security는 Flask-Principal을 하위 집합으로 포함합니다. Flask-Principal은 단 하나의 옵션 일지라도 인증을 위해 Flask-Login을 사용할 수 있습니다. 그래서 당신은 그것들이 모두 관련되어 있음을 볼 수 있습니다. 그러나 어떤 것은 서로의 부분 집합이나 수퍼 세트입니다.

특정 사례에서 이미 우수한 Flask-Login을 사용하고 있습니다. Flask-Login이 지원하지 않는 사용자 역할을 추가해야하는 경우 사용자 모델을 확장하여 역할 열을 추가 한 다음 login_required 데코레이터를 덮어 쓰는 것이 좋습니다. Flask-Security 등의 확장 프로그램을 사용하려고하면 상황에 따라 과용 될 수 있습니다.

예를 들어, 역할 필드를 사용하여 User 클래스를 확장합니다. "ANY", "ADMIN"등의 값을 가질 수 있습니다. 어떤 수단도 중요하지 않습니다.

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

나는 다음과 login_required 장식 덮어 쓰게됩니다 :

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