2013-02-27 14 views
6

私のアプリケーションでは、バックエンドでユーザーのアクセス許可と役割を変更できます。ユーザー権限が変更された後に強制的に再認証を行う

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

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

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

+0

こちらもお答えしています。 http://stackoverflow.com/questions/14184484/how-to-administratively-invalidate-a-session-that-used-remember-me-option – MDrollette

+0

@MDrollette私はこれが返答されることはないと感じています。私は、唯一の解決策は、カスタムセッションマネージャーかもしれないと思う。 –

+0

セッションIDと共にセッションIDと共にユーザーIDを格納することになります。特に難しいとは言えませんが、最良のアプローチについてもわかりません。 – MDrollette

答えて

9

Symfony\Component\Security\Core\User\EquatableInterfaceを実装するユーザークラスを作成します。

isEqualTo()メソッドからfalseを返すと、ユーザーは再認証されます。このメソッドを使用して、変更されたときに再認証を強制するプロパティー(ケース内のロール)のみを比較します。

+0

+1わかりました。この小切手はどこで確認する必要がありますか?私は毎回リクエストする必要がありますか? –

+0

あなたのユーザークラスがインターフェイスを実装するようにしてください。 'isEqualTo()'メソッドを強制する必要があります。残りはSymfonyによって処理されます。 –

+0

素晴らしいことです!) –

-1

あなたは私がやったことと同様のアプローチに従うことによって、この問題を回避することができます

  1. ユーザがログインすると、それらの権限のチェックサムと一緒にセッション内のすべての権限を格納します。
  2. データベースまたはディスク上に、そのユーザーIDに対して同じチェックサムを格納します。
  3. ユーザーが要求するたびに、ディスク上のチェックサムがそのユーザーのセッション内のチェックサムと一致することを確認します。異なる場合は、ユーザーのセッションにアクセス許可を再ロードしてください。
  4. 権限を変更するときに、そのユーザーに対して格納されているデータベース(またはディスク)のチェックサムを更新します。これにより、次のリクエストで再同期がトリガーされます。
+0

面白いが、複雑に見える。これはあなたが開発しているヘルプデスクの一種ですか? –

+0

@artworkadシンプルではありません。サービスコンテナ、セキュリティコンテキスト、リクエストオブジェクトなどの基本的なsymfony2コンポーネントを使用して、アクセス許可をどうするかを決定します。 – JamesHalsall

+0

@Jaitsu、Symfonyの組み込みソリューションはとてもシンプルなので、ヒステリックに笑うでしょう。私の答えを見てください。 ;) –

関連する問題