4

Flask-Security と MySQL を使用する Flask アプリがあります。残念ながら、Flask-Security はグループ/マルチテナント管理を提供していません ( https://github.com/mattupstate/flask-security/issues/285 )。

以下を実装したいと思います。

  1. ログイン時に、ユーザーは自分のログイン資格情報を入力します。
  2. ユーザー DB を照会して、ユーザーがいくつのグループ (管理、経理、営業など) に属しているかを確認します。
  3. ユーザーが複数のグループに属している場合は、ポップアップが表示され、ユーザーが属しているグループが一覧表示されます。
  4. グループを選択すると、ユーザーがログインし、グローバル変数 (tenant_id または group_id) がユーザーのセッションに設定されます。このグローバル変数を使用して、ユーザーによる DB 検索を事前にフィルター処理できます。

手順 2 と 4 を実装する方法がわかりません。このような実装に Flask g.object ( http://flask.pocoo.org/docs/0.10/api/#flask.g ) を使用できますか?

4

2 に答える 2

0

ほとんどの場合、Flask-Security のロールを再利用してユーザーのグループ化を行い、それをユース ケースに関連させておくことができます。

ユーザーが持っている役割に基づいて特定のことを行うことができ、複数の役割にいる場合は、特定の役割をセッション変数に保存して、現在の役割を追跡し、特定の機能を表示することができますその役割(グループ)。

if user_datastore.find_role("db_amin") in current_user.roles:
    ... db admin specific ...

デコレーターを使用してロール固有のルートを実行することもできます。

@roles_accepted("db_admin", "db_backup")
@roles_required('db_admin')

ドキュメントはhttps://pythonhosted.org/Flask-Security/api.htmlにあります

于 2015-04-27T18:09:39.803 に答える
0

Flask は優れたフレームワークであり、すぐに使用できる拡張機能が多数ありますが、カスタム ソリューションに関しては、多くの場合、多少の手間がかかります。

これは、使用している認証バックエンドには欠けている機能のように思われるため、考慮すべき点がいくつかあります。

  • グループ管理を含むバックエンドに切り替える
  • 独自のロール
  • 現在のバックエンドを拡張する

後者の 2 つのオプションは、どちらも手間がかかります。

グループ管理が整ったら、flask g オプションを実際に使用できます。ユーザー オブジェクトへの参照を格納するだけで十分です。クエリおよびフィルタリング バンはすべてバックエンドで実行されます。

いくつかの興味深い読み物:

独自の単純なパーミッション システムの構築 独自のパーミッション システムを作成することに決めた場合は、手がかりになるかもしれません。

関連する質問のソリューションは、Flask-Principal を実装しています

于 2015-04-21T10:48:08.550 に答える