我正在設計一個具有不同類型用戶的課程管理系統,包括系統管理員,分支經理和分支用戶。正如您所期望的那樣,系統管理員可以管理所有記錄,分支經理可以管理其分支中的所有記錄,而分支用戶只能管理其記錄。我應該在哪裏過濾記錄?
我的問題是,應該在哪裏進行過濾?我應該在DAL層做到嗎?或者只是返回來自DAL的所有記錄,然後在其他層進行過濾?我一直在尋找有關授權的最佳實踐,但我沒有找到任何可以清楚解釋這方面的內容。
我正在設計一個具有不同類型用戶的課程管理系統,包括系統管理員,分支經理和分支用戶。正如您所期望的那樣,系統管理員可以管理所有記錄,分支經理可以管理其分支中的所有記錄,而分支用戶只能管理其記錄。我應該在哪裏過濾記錄?
我的問題是,應該在哪裏進行過濾?我應該在DAL層做到嗎?或者只是返回來自DAL的所有記錄,然後在其他層進行過濾?我一直在尋找有關授權的最佳實踐,但我沒有找到任何可以清楚解釋這方面的內容。
一般來說,無論出於何種原因,數據庫記錄的選擇都應該由數據庫完成 - 這是它的工作。
此外,
此問題的實現級別答案將很大程度上取決於您的工具。這是.NET,Java,PHP,Python嗎?
您的DAL只應該關注將數據返回並提交給數據存儲。您所描述的過濾最好在中間層和業務邏輯中處理。大多數查詢都會在登錄用戶的上下文中發生,以便返回適當的數據,因此在設計系統時請記住這一點。
UPDATE:
鑑於.NET和NHibernate,NHibernate的是你的ORM/DAL。理想情況下,DAL應該是一個Repository實現,以允許您將數據導入和導出數據庫。
設計一個域模型來處理用戶,角色和分支之間的關係。每個實體都與其他實體有關係。這些分支的「記錄」也必須建模爲實體。一旦在模型中建立了關係,您就可以在檢索相關實體的每個實體上設計方法。你可能會認爲這個模型是一種ViewModel或Controller。它的工作是明確實現實體之間的關係,在NHibernate提供的抽象之上創建一個抽象。
這是.NET使用NHibernate的DAL。我不知道的是,如果我應該讓DAL知道正在執行查詢的用戶。 – jesusbolivar 2010-08-06 19:28:32
一般來說,DAL應該對數據的*性質一無所知,只需知道如何從數據庫中進出數據。您應該在DAL頂部有一個領域模型,瞭解用戶是什麼,以及他們應該訪問哪些對象。 – 2010-08-06 19:30:15
你將如何實現GetRegistrationsForCourse之類的方法?返回的記錄應根據調用它的用戶進行過濾。 – jesusbolivar 2010-08-06 19:38:42