簡體   English   中英

在哪里放$ user-> logged_in()函數? user_model或user_controller?

[英]Where to put $user->logged_in() function? user_model or user_controller?

我總是將用戶身份驗證放在application/models/user_model.php ,但這真的是放置該功能的最佳位置嗎?

讓我對這種編碼方式產生懷疑的是,我聽說過,模型應該只適用於數據庫。 所以這意味着會話相關的東西不能在模型中。 真的是這樣嗎?

我通過config/autoload.php加載user_model模型使函數可訪問。

它應該是真實MVC和MVC啟發的設計模式中模型層的一部分,因為logged-in將是域對象的狀態,視圖應該通過身份驗證/識別服務進行檢查。

您可能會從閱讀本文中受益,但這里有一個快速提示 - 模型與SQL數據庫或任何其他特定存儲介質無關。 會話只是一種不同的存儲形式。

不幸的是,CodeIgniter實際上並沒有實現MVC或MVC啟發的設計模式,而是復制Rails。 這意味着,除非您想在CI中實現適當的模型層(這不是很簡單),否則您必須執行此檢查,CodeIgniter稱為“控制器”。


更新

你可能要考慮的方式將控制器外的授權檢查(如描述在這里 )。 這樣,當您檢測到當前用戶無權訪問方法時,您將獲得對代碼執行的額外控制,並且不會“鎖定”在所選控制器中。

如果在控制器內部進行授權檢查,則最終會重定向客戶端,並且當某些內容發生更改(因此違反OCP )時,您必須重寫每個控制器。

在控制器外部放置認證服務的初始化和授權檢查的性能不會違背MVC的思想,因為在MVC的定義中,視圖僅負責改變模型層和當前視圖的狀態。 沒有任何關於實例化它們的說法。 因此,在對控制器執行操作之前初始化身份驗證服務(它是模型層的一部分)是可以的。

暫無
暫無

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

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