一般に、それらはすべて似ていますが、一部の機能は他の機能よりも多くなっています。たとえば、Flask-Security は非常に重く、追加の暗号化などの追加のセキュリティ機能が多数あります。実際、Flask-Security には Flask-Principal がサブセットとして含まれています。Flask-Principal は、認証に Flask-Login を使用できますが、これは 1 つのオプションにすぎません。したがって、それらはすべて関連していることがわかりますが、一部は互いにサブセットまたはスーパーセットです。
特定のケースでは、すでに優れた Flask-Login を使用しています。Flask-Login がサポートしていないユーザー ロールを追加する必要がある場合は、ユーザー モデルを拡張して Roles 列を追加し、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