2010-02-24 23 views
1

我添加了AuthorizeAttribute來保護我的ActionResult。如何根據MVC中的角色顯示數據?

[Authorize(Roles = "MyUser, Admin")] 
    public ActionResult Index() 
    { 
     var allData = myDataRepository.FindAllData(); 
     return View(allData); 
    } 

索引視圖顯示我的表中的數據列表。我想顯示1行是用戶角色是MyUser和所有行,如果角色是管理員。

是正確的(MVC)方式只是檢查用戶角色和做一個if else?

回答

0

我相信你會想要將角色限制包含到你的資源庫中,並允許它確定要返回的數據。

var allData = myDataRepository.FindAllDataForRole(roleName); 

哈爾

+0

如果我延長從alexn響應這一理念 - 這將是像 VAR allData.MyDataRepository.FindAllDataForRole(HttpContext.Current.User.IsInRole(「管理」),「管理」:「」); 我只是喜歡在視圖外面做這樣的決定,讓視圖顯示我拋出的任何東西。 – Hal 2010-02-24 14:39:05

0

如果用戶(或他們的角色)是合適的領域對象給你,並改變你的索引結果()方法,那麼指數方法本身應該說,用戶如一個參數,首先關閉。

Authorize過濾器是關於這個人是否應該完全可以執行給定的操作,而不是關於他們在該操作中可以看到的數據。

正如哈爾所說,用戶的角色應該作爲存儲庫查詢中的標準應用,或者也可以將用戶本身作爲標準來應用(例如,如果單個用戶擁有多個角色和個人用戶權利)。

這樣的事情,那麼:

[Authorize(Roles="MyUser, Admin")] 
public ViewResult Index(User user) 
{ 
    return View(repo.GetDataForUser(user)); 
} 

然後,你的資料庫的GetDataForUser方法裏面,你做的權利或任何任何過濾。

相關問題