2010-01-25 27 views
4

因此,我已經成功實現了自己的MembershipProvider,並且完全按照我的意圖工作。ASP.NET MVC設計問題何處放置特定用戶/「訪問級別」代碼

我已經用[Authorize]屬性來裝飾我的控制器動作,並且這也是完全按照我的意願工作的。

我的問題是,我應該在哪裏放置代碼來確定「使用多少」訪問權限?

[授權]僅表示當前用戶是系統的有效用戶。當前用戶可能有UserAccess = 1,或2,或4,或8或其他。我會在Controller方法中執行此檢查嗎?還是應該將用戶傳遞給我的Repository類,並讓respository類只返回當前用戶有權訪問的記錄?

換句話說,分離這種擔憂的最好方法是什麼?因爲它涉及到認證。我在想,我應該將用戶傳遞給Repository.GetData()方法,並讓它執行必要的查找。

此queston的第二部分是,如何基於用戶限制對特定視圖的訪問?例如,如果當前用戶具有UserAccess = 2,我想省略一些字段,但是如果它的UserAccess = 4,我想顯示所有字段。

更新

多一點點的研究之後,它看起來像我可能會一舉兩得,如果我實現我自己的RoleProvider - 我看我怎麼能做到這一點,限制數據訪問在控制器[Authorize(Roles = "Admin)]上,它看起來對我來說是最好的選擇。我如何使用它來根據角色呈現不同的視圖?我會製作獨立的視圖並從控制器返回正確的視圖嗎?或者用一個在線C#做一個視圖?

回答

1

問題的第一部分:保持控制器精簡併將訪問級別代碼放入存儲庫類/模型中。問題的第二部分:您可以爲每個訪問級別創建不同的視圖。或者你可以在視圖本身中設置邏輯來檢查用戶的訪問級別,但這是相當黑客和不安全的。我只是讓視圖不會渲染任何從模型返回空/空的字段。

+0

這就是我在想,控制器儘可能的精益。 – Nate 2010-01-25 21:19:04

0

您可以創建自己的AuthorizeAttribute,該參數需要UserRole在參數中執行此操作。

[CustomAuthorize(UserRole.Administrator)] 
public ActionResult YourAction() 
{ 
}