2013-06-26 22 views
10

Bất cứ ai có thể nói nếu có sự khác biệt cơ bản giữa 3 phần mở rộng này hoặc tất cả chúng có làm những việc tương tự không? Tôi đã đọc các tài liệu và dường như có khá nhiều sự giao nhau. Tôi đoán một số chỉ cung cấp nhiều tính năng hơn.Flask-auth, Hiệu trưởng và Flask Security

Tôi muốn thêm vai trò người dùng vào ứng dụng của mình để một số người dùng nhất định có quyền nhất định. tức là người dùng level1 có thể tạo ra 5 tài nguyên, người dùng cấp 2 có thể tạo ra 10 vv. Tôi đã xem xét việc tạo tài khoản của riêng mình, có vẻ như nó không quá phức tạp. Tôi đang xem xét sử dụng một trang trí dọc theo các dòng của http://flask.pocoo.org/snippets/98/ này sẽ có bất kỳ vấn đề an ninh với giải pháp này? Tôi đã sử dụng Flask-đăng nhập vì vậy tôi sẽ tích hợp nó với điều này.

Trả lời

15

Flask-Auth là một giải pháp duy nhất cho cả xác thực và quyền, nhưng tôi chưa thấy nó được sử dụng/tham chiếu nhiều.

Flask-Principal sẽ làm những gì bạn muốn, nhưng nó khá trần; lăn của riêng bạn sẽ không làm việc nhiều hơn nữa.

Flask-Security cuộn lên Flask-Login, -Principal và một số tiện ích mở rộng khác thành toàn bộ mạch lạc hơn, cài đặt chúng dưới dạng phụ thuộc. Sử dụng các phương pháp mà nó cung cấp thay vì các phương thức từ các phần mở rộng riêng lẻ khi có thể. Tôi đã không sử dụng nó nhưng nó có vẻ như nó sẽ mất rất nhiều lao động thủ công ra khỏi này.

Đối với trường hợp sử dụng cụ thể của bạn chỉ cần thêm vai trò người dùng, tôi khuyên bạn nên gắn bó với Flask-Principal. Nó hoạt động tốt, được duy trì và đủ chung để tích hợp với bất kỳ yêu cầu nào bạn có.

4

Nói chung, tất cả đều giống nhau nhưng một số có nhiều tính năng hơn các tính năng khác. Ví dụ, Flask-Security là rất nặng với rất nhiều tính năng bảo mật bổ sung như mã hóa thêm. Trong thực tế, Flask-Security bao gồm Flask-Principal như một tập con. Flask-Principal có thể sử dụng Flask-Login cho auth mặc dù đó chỉ là một lựa chọn. Vì vậy, bạn có thể thấy rằng tất cả chúng đều có liên quan nhưng một số là tập hợp con hoặc bộ siêu của nhau.

Bây giờ trong trường hợp cụ thể của bạn, bạn đã sử dụng Flask-Đăng nhập rất tuyệt vời. Nếu bạn cần thêm vai trò người dùng mà Flask-Login không hỗ trợ, tôi khuyên bạn nên mở rộng Mô hình người dùng của mình để thêm cột Vai trò và sau đó ghi đè lên trình trang trí login_required. Nếu bạn cố gắng sử dụng các phần mở rộng như Flask-Security vv, nó có thể là quá mức cần thiết trong trường hợp của bạn.

Ví dụ: tôi sẽ mở rộng Lớp người dùng của mình bằng trường vai trò. Nó có thể có giá trị "BẤT CỨ", "QUẢN TRỊ" vv BẤT CỨ có nghĩa là không quan trọng.

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

tôi sau đó sẽ ghi đè lên các trang trí login_required như:

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 
Các vấn đề liên quan