大型系統正在被許多用戶使用,因此他們可以登錄系統,然後他們擁有額外的權限。權限不同,例如查看有關其他用戶的詳細信息的權限或執行不同操作的權限。軟件開發的良好做法是使用設計模式。其中之一是MVC(模型 - 視圖 - 控制器)。所以,我的問題是:模型的哪一層應該檢查權限?該應用程序邏輯應該驗證用戶權限,或者在視圖層中,一些選項應該隱藏/鎖定/等?MVC設計模式中的用戶權限
0
A
回答
4
身份驗證和授權不是MVC設計模式本身的一部分。它也不是任何基本的MVC構建塊的直接責任。
您可以探索的解決方案是將訪問控制放置在裝飾器中。
您創建了一個Container
實例,您可以在其中注入一個對象(它可能是某個控制器,視圖或模型層的服務)以及某個授權管理器。然後你調用這個容器上的方法,就好像它是原始對象一樣。如果通過訪問管理器清除呼叫,則執行該方法。否則,你會引發異常。
不幸的代碼示例是在PHP中,因爲這是我的 「原生」 的語言
$something = new SomeThing;
$data = $something->getSensitiveData(); // will simply return all the information
$accessCheck = new AccessManager(.. some dependencies ..);
$something = new Container($something, $accessCheck);
try
{
$data = $something->getSesitiveData();
// will return all information if you pass the authorization.
}
catch (AccessDeniedException $e)
{
// do something
}
這種方法有幾個好處:
- 在訪問管理是集中
- 你可以在這樣的容器中注入任何實例
- 不會造成OCP違反
- 讓你推遲除了授權的同時開發
在這樣的裝飾的「包裝」將在工廠,創建您的實例中,通常會發生的。
至於哪個部分的MVC黑社會你應該包裝。那麼......通常這足以包裝控制器(特別是在Web上使用MVC時)。但是,根據您構建代碼庫的其餘部分的方式,對於服務(模型層中的一組類/實例)添加這種授權檢查可能也是合理的。
問題是,這種方法對粒度沒有限制。您可以在任何對象上添加這種類型的訪問控制。即使您沒有訪問該對象的源代碼。
相關問題
- 1. 設計模式的權限
- 2. 用戶 - 組 - ASP.NET MVC的權限用戶界面設計
- 3. 設計模式來實現一組權限的用戶
- 4. 權限管理的設計模式
- 5. 如何設計用戶,角色和權限模式?
- 6. 權限設計
- 7. MVC設計模式 - 設計模型
- 8. mvc中的用戶角色和權限
- 9. 多個設計用戶或一個用戶和CanCanCan的權限?
- 10. 學習MVC設計模式
- 11. MVC模式設計論壇?
- 12. mvc和mvp設計模式
- 13. Android MVC設計模式
- 14. MVC中的RESTful設計模式?
- 15. CKAN設置用戶權限
- 16. 模式/權限處理的設計建議
- 17. Swing瘦客戶機中的MVC設計模式
- 18. RabbitMQ用戶權限格式
- 19. 如何使用設計給不同的用戶權限?
- 20. 使用MVC,OO和設計模式的軟件設計入門
- 21. 天冬氨酸MVC IIS用戶權限
- 22. MVC佈局模型設計模式
- 23. 多租戶 - 設計模式
- 24. 設計用戶權限檢查的方法
- 25. 水豚和管理員用戶權限(和設計)的問題
- 26. WMI中的用戶權限
- 27. SQL中的用戶權限
- 28. Django模塊的用戶權限
- 29. 檢查用戶權限的權限
- 30. 用戶權限
在Software Engineering SE中查看此問題:https://softwareengineering.stackexchange.com/questions/220574/where-should-user-permission-checks-take-place-in-and-mvc-and-by-who – Flimm