簡體   English   中英

如何在Symfony2登錄時設置MySQL會話變量

[英]How to set MySQL session variable upon Symfony2 login

我需要對將使用Symfony2應用程序訪問的MySQL數據庫進行全面的審核。

據我所知,標准做法是將內置MySQL函數USER()返回的值插入審計表中,以記錄誰在更改記錄。 由於對數據庫的所有更改都將通過Symfony2前端使用在parameters.ini文件中指定的數據庫連接參數來執行,因此USER()將始終返回相同的值。 為了解決這個問題,我使用了一個MySQL會話變量@sf_user。 我可以從Symfony會話對象獲取用戶名,並使用它在控制器中設置@sf_user的值,例如

$em = $this->getDoctrine()->getEntityManager();
// set @sf_user session variable in the database
// so trigger can insert this in audit table after delete
$conn = $em->getConnection();
$username = $this->get('security.context')->getToken()->getUser()->getUsername();
$sql = 'SET @sf_user = \''.$username.'\'';
$stmt = $conn->prepare($sql);
$stmt->execute();

很好,但是由於我正在審核所有表並且無法預測用戶將首先執行哪個操作,因此需要在每個控制器中重復此代碼,以確保在會話開始時設置@sf_user。

我真正想做的是在用戶登錄時設置此變量。我已經按照The Book所述設置了登錄頁面。 問題是,我的SecurityController僅處理顯示登錄表單,而“安全系統本身負責檢查提交的用戶名和密碼並驗證用戶身份”。

因此,我的問題是,在用戶成功登錄后,我可以在哪里插入以上代碼,以便始終在會話開始時執行該代碼?

非常感謝。

您可以創建一個kernel.request事件偵聽器並在那里執行查詢。 除此之外,您還可以查看EntityAudit捆綁包,該捆綁包會自動插入當前作者姓名。 但是它有一些限制

感謝所有建議,我剛剛回到每個deleteAction控制器中設置變量@sf_user。 它不漂亮,但是可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM