9

私のアプリケーションでは、バックエンドでユーザーの権限とロールを変更できます。

ユーザーがログインしてユーザーの役割を削除しても、ユーザーには役割がないため、実際にはアクセスが許可されていないコンテンツに引き続きアクセスできます。変更は、ユーザーがログアウト/ログインで自分自身を再認証した場合にのみ有効になります。

だから私の質問は、ログインしたユーザー(私ではない)のセッションにアクセスできますか?自分のセッションにアクセスして破棄できるため、再度ログインする必要があります。しかし、ログインしているすべてのユーザーのセッションを取得したいのですが、これは可能ですか?それに関するリソースは見つかりませんでした。

私はsymfony2.1とfosuserbundleでPdoSessionStorageを使用しています。

4

2 に答える 2

11

ユーザークラスにを実装させますSymfony\Component\Security\Core\User\EquatableInterface

falseメソッドから戻るisEqualTo()と、ユーザーは再認証されます。そのメソッドを使用して、変更時に再認証を強制する必要があるプロパティ(この場合はロール)のみを比較します。

于 2013-02-27T17:50:10.193 に答える
-1

私が行ったのと同様のアプローチに従うことで、この問題を回避できます。

  1. ユーザーがログインするときに、すべてのアクセス許可をそれらのアクセス許可のチェックサムとともにセッションに保存します。
  2. そのユーザーIDに対して、同じチェックサムをデータベースまたはディスクに保存します
  3. ユーザーがリクエストを行うときはいつでも、ディスク上のチェックサムがそのユーザーのセッション中のチェックサムと一致することを確認してください。異なる場合は、権限をユーザーのセッションにリロードします
  4. アクセス許可を変更するときは、そのユーザーに対して保存されているデータベース(またはディスク)のチェックサムを更新します。これにより、次のリクエストで再同期がトリガーされます。
于 2013-02-27T17:03:37.083 に答える