一般来说,它们都相似,但其中一些具有比其他更多的功能。例如,Flask-Security 非常重,有很多额外的安全功能,比如额外的加密。事实上,Flask-Security 包括 Flask-Principal 作为一个子集。Flask-Principal 可以使用 Flask-Login 进行身份验证,即使这只是一种选择。所以你可以看到它们都是相关的,但有些是彼此的子集或超集。
现在,在您的特定情况下,您已经在使用非常棒的 Flask-Login。如果您需要添加 Flask-Login 不支持的用户角色,我建议您扩展您的用户模型以添加角色列,然后覆盖 login_required 装饰器。如果您尝试使用 Flask-Security 等扩展程序,在您的情况下可能会有点过分。
例如,我将使用角色字段扩展我的 User 类。它可以有值“ANY”、“ADMIN”等。ANY 表示无关紧要。
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