一般に、それらはすべて類似していますが、一部のものは他のものより多くの機能を備えています。たとえば、Flask-Securityは非常に重く、暗号化のような余分なセキュリティ機能があります。実際、Flask-Securityには、Flask-Principalがサブセットとして含まれています。 Flask-Principalは、それがほんの1つのオプションであっても、認証のためにFlask-Loginを使用できます。したがって、それらはすべて関連していますが、一部は互いにサブセットまたはスーパーセットであることがわかります。
あなたの特定のケースでは、すでに優れたFlask-Loginを使用しています。 Flask-Loginがサポートしていないユーザーロールを追加する必要がある場合は、User Modelを拡張してRoles列を追加し、login_requiredデコレータを上書きすることをお勧めします。 Flask-Securityなどの拡張機能を使用しようとすると、それはあなたの状況で過度の可能性があります。
例として、私はUserフィールドをroleフィールドで拡張します。 "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