2012-03-09 38 views
4

每當我編輯用戶角色時,用戶都需要註銷並重新登錄才能看到更改。推廣用戶時沒有問題,因爲他們只是在再次登錄之前纔會看到額外的權限。但是,當降級發生時,用戶仍將保持其現有的角色,從而施加安全風險。想象一下,撤銷流氓員工的管理員用戶,仍然有能力做任何事情(例如破壞系統),直到他們註銷!FOSUserBundle/Symfony2:強制註銷給定用戶(不是當前登錄的用戶)的用戶

是否有可能使與特定用戶相關的所有會話或令牌無效?如果有另一種方式來動態更新用戶的角色而不註銷它們,我很樂意聽到它!

只是爲了說清楚,我並沒有試圖使當前登錄用戶的會話/令牌無效。

在此先感謝!

回答

2

Symfony在會話中存儲_security_match_firewall_name密鑰下的序列化令牌對象。您可以反序列化它,過濾角色,然後再保存它。要讀取/保存會話值,您可以使用PdoSessionStorage。您可能必須創建一個用於跟蹤用戶會話的額外表格。

+0

感謝您指點我正確的方向。是否可以在會話表中添加額外的列來存儲與PdoSessionStorage使用的會話ID關聯的用戶ID?另外,如何獲得給定會話標識的令牌對象?提前致謝! – 2012-03-10 20:19:59

+0

要做到這一點,您可能需要修改PdoSessionStorage類。我認爲最好是創建一個交互式登錄監聽器,並在'onSecurityInteractiveLogin'方法中獲取會話ID並將其保存在一個表中,比如'user_sessions'。 – 2012-03-10 20:31:39

+0

這可能是將其存儲在另一個數據庫中的最佳方式。我仍然不知道如何從存儲在數據庫中的會話值轉換回安全令牌。 – 2012-03-10 20:48:53