Asp.net mvc 如何在MVC中显示基于角色的数据?

Asp.net mvc 如何在MVC中显示基于角色的数据?,asp.net-mvc,security,Asp.net Mvc,Security,我添加了authorized属性以保护ActionResult [Authorize(Roles = "MyUser, Admin")] public ActionResult Index() { var allData = myDataRepository.FindAllData(); return View(allData); } “索引”视图显示“我的表”中的数据列表。我想显示1行是用户,角色是MyUser,如果角色是Admin,则

我添加了authorized属性以保护ActionResult

[Authorize(Roles = "MyUser, Admin")]
    public ActionResult Index()
    {
        var allData = myDataRepository.FindAllData();
        return View(allData);
    }
“索引”视图显示“我的表”中的数据列表。我想显示1行是用户,角色是MyUser,如果角色是Admin,则显示所有行


正确的(MVC)方法仅仅是检查用户角色并执行if-else吗?

我相信您会希望将角色限制包括到存储库中,并允许其确定要返回的数据

var allData = myDataRepository.FindAllDataForRole(roleName);
Hal

如果用户(或其角色)对您来说是一个合适的域对象,并且正在更改Index()方法的结果,那么Index方法本身首先应该将该用户作为参数

Authorize过滤器是关于此人是否应该能够执行给定的操作,而不是关于他们在该操作中可以看到哪些数据

正如Hal所说的,用户的角色应该在您对存储库的查询中作为一个标准应用,或者可能将用户本身作为一个标准应用(例如,如果一个用户拥有多个角色的权限加上单个用户的权限)

这样的话:

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

然后,在存储库的GetDataForUser方法中,您可以对权限或其他内容进行任何过滤。

如果我在alexn的响应中扩展此想法,它将类似于var allData.MyDataRepository.FindAllDataForRole(HttpContext.Current.User.IsInRole(“Admin”)?“Admin”:“”;我只是喜欢把这样的决定排除在视图之外,让视图显示我对它的任何意见。