在使用Entity Framework 4.1的Web應用程序中,我們使用SQL Server Membership來管理用戶訪問。但是,我們需要實施更細化的角色集權限管理。使用Entity Framework管理實體訪問和權限
在數據庫中,我們已經創建了相對錶:
- Roles
- Permissions
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role)
一些我們限制語義與EF接入的核心實體的使用屬性,例如,給出一個特定的用戶,他/她可以請僅查看相關的裝運訂單或固有數據。
現在我們想注入的權限在裏面,這意味着作爲例子,一個客戶可以看到和創建訂單,而公司(這是兩個不同的角色)只能看到訂單爲他們的產品,也打印報告。
這個想法是使用屬性也用於實體級別的權限,並檢查當調用方法時當前用戶是否擁有適當的權限。例如:
public void BeforeAdd()
{
// Get required permissions for the specific entity (Order as example)
//Check that current user has permission of creating a new Order
}
這樣的方法將被每個實體調用,從而允許集中控制權限在實體級別。
我們使用MVC作爲前端,在那裏我們已經實現了角色和權限的訪問。我們需要對後端部分(包含數據層)進行相同的處理。這些是通過Web服務進行通信的兩臺獨立服務器通過在後端部分實施權限管理可以加強對數據訪問的控制。
是否有任何可以遵循的模式或最佳實踐(最終使用EF的某些內置功能)來實現權限管理?
您使用[repositories](http://msdn.microsoft.com/en-us/library/ff649690.aspx)嗎? –
是的,我們使用通過泛型允許按特定實體獲取存儲庫的存儲庫。 – Francesco