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