8

私はSymfony2を使用しており、ユーザーとロールはすでにDBに保存されています。以下のようなものを設定するとsecurity.yml、うまく機能します。

access_control:
   - { path: ^/admin, role: ROLE_ADMIN}
   - { path: ^/users, role: ROLE_MANAGER}

ただし、このaccess_control情報をデータベースに保存して、システムのユーザーが管理インターフェイスを使用してアクセス許可自体を変更できるようにします。

ACLとFOSUserBundleを調べましたが、これに対する解決策が見つかりませんでした。次のような方法で権限を確認できることがわかりましたがif ($user->hasRole($role))、すべてのコントローラーでこれを行う必要があります。

動的な「access_control」機能を定義する方法はありますか?たぶん、trueまたはfalseを返す可能性のあるクラスにaccess_controlをリダイレクトするようなものです。解決策はありますか?

4

2 に答える 2

5

最善の方法はDB_ROLE_CHECK、データベースに保存されているロールに対して検証するアクション/サービスに設定する特定のロール(例)を設定することです。

DB_ROLE_CHECK次に、データベースエントリに対してリクエストをフックして検証するセキュリティ投票者を作成します。

見る:

于 2012-10-22T22:19:24.410 に答える
3

アクセスマップはここに作成されます。

access_controlが見つからない場合、何も行われません。

次に、 AccessMapInterfaceの独自の実装を定義し、パラメーターsecurity.access_map.classをクラスでオーバーライドします。

AccessMapを構築するには、おそらくファクトリが必要になります。

于 2012-10-22T22:34:46.483 に答える