11

これら 3 つの拡張機能に根本的な違いがあるのか​​、それともすべて同じようなことをするのか、誰にもわかりますか? 私はドキュメントを読んでいますが、かなり多くのクロスオーバーがあるようです。より多くの機能を提供するだけのものもあると思います。

特定のユーザーが特定の権限を持つように、アプリにユーザー ロールを追加したいと考えています。つまり、レベル 1 のユーザーは 5 つのリソースを作成でき、レベル 2 のユーザーは 10 のリソースを作成できます。このhttp://flask.pocoo.org/snippets/98/の行に沿ってデコレータを使用することを検討していますが、このソリューションにはセキュリティ上の問題がありますか? 私はすでに Flask-login を使用しているので、これと統合します。

4

2 に答える 2

15

Flask-Auth は、認証とアクセス許可の両方に対する単一のソリューションですが、あまり使用/参照されていません。

Flask-Principal はあなたが望むことを行いますが、それはかなり必要最小限です。自分でロールバックするのはそれほど面倒ではありません。

Flask-Security は、Flask-Login、-Principal、およびその他の拡張機能をより一貫性のある全体にまとめ、依存関係としてインストールします。可能であれば、個々の拡張機能のメソッドではなく、提供されているメソッドを使用してください。私はそれを使用していませんが、これから多くの手作業が必要になるようです。

ユーザーロールを追加するだけの特定のユースケースについては、Flask-Principal に固執することをお勧めします。それはうまく機能し、維持され、どんな要件にも統合できるほど一般的です。

于 2013-06-26T14:03:23.647 に答える
4

一般に、それらはすべて似ていますが、一部の機能は他の機能よりも多くなっています。たとえば、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
于 2013-06-26T14:09:41.197 に答える