我有一個非常大的問題?。?/h1>
在User控制器中有一個actionVlogin方法,這個方法主要的功能是檢查Url的參數并設置cookie的。然而User控制器時繼承Base控制的,base控制器中有個beforeAction方法,這個方法主要的作用是檢查權限,并且在所有繼承Base控制器的控制器里面的所有方法之前執行。
我的問題是:既然User控制器時繼承Base控制器的,所以User控制器里面的actionVlogin方法在beforeAction方法之后執行。
當我們在導航條敲下/User/Vlogin?uid=1時,先跑的是beforeAction方法,此刻還沒有跑到actionVlogin方法。因為是有先后順序的,所以在
跑到beforeAction方法時,Cookie還沒有進行設置(Cookie在actionVlogin方法設置)。所以你在beforeAction方法里面的所有檢查都好像是
徒勞的,因為此時并沒有Cookie。然而你把全部代碼都寫完權限功能卻是好用的,為什么?是我理解錯了嗎?
求大神指教~~
求大神指教~~求大神指教~~
在User控制器中有一個actionVlogin方法,這個方法主要的功能是檢查Url的參數并設置cookie的。然而User控制器時繼承Base控制的,base控制器中有個beforeAction方法,這個方法主要的作用是檢查權限,并且在所有繼承Base控制器的控制器里面的所有方法之前執行。
我的問題是:既然User控制器時繼承Base控制器的,所以User控制器里面的actionVlogin方法在beforeAction方法之后執行。
當我們在導航條敲下/User/Vlogin?uid=1時,先跑的是beforeAction方法,此刻還沒有跑到actionVlogin方法。因為是有先后順序的,所以在
跑到beforeAction方法時,Cookie還沒有進行設置(Cookie在actionVlogin方法設置)。所以你在beforeAction方法里面的所有檢查都好像是
徒勞的,因為此時并沒有Cookie。然而你把全部代碼都寫完權限功能卻是好用的,為什么?是我理解錯了嗎?
求大神指教~~
求大神指教~~求大神指教~~
2018-08-27
BaseController的beforeAction()可以看做有三個功能:
登錄狀態校驗。?
注意到beforeAction()的開始幾句:
邏輯是:如果用戶已經登錄(有cookie), 則獲取用戶的權限列表; 如果沒有登錄,則重定向到登錄模塊(也就是說User的Vlogin())。
但是
時排除了login和vlogin兩個方法的,也就是說訪問vlogin時,不會進入到這塊的判斷跳轉。所以繼續向下執行。
?2. 記錄到訪問日志。
也就是說`$model_log`處理的那一段。[直接寫入,不需要校驗]
3. 驗證訪問權限。
但是 checkPrivilege()方法有下面一段:
所以vlogin()的訪問權限也不會進行校驗。
所以,綜上,訪問Vlogin()時,beforeAction()的作用僅僅是記錄訪問日志,并沒有什么關于cookie的校驗,所以也不存在徒勞之說。
2018-03-26
。。。