如何根据MVC中的角色显示数据?

时间:2010-02-24 14:26:24

标签: asp.net-mvc security

我添加了AuthorizeAttribute来保护我的ActionResult。

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

“索引”视图显示我的表中的数据列表。我想显示1行是用户角色是MyUser,如果角色是Admin,则显示所有行。

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

2 个答案:

答案 0 :(得分:0)

我相信您希望将角色限制包含在您的存储库中,并允许它确定要返回的数据。

var allData = myDataRepository.FindAllDataForRole(roleName);

哈尔

答案 1 :(得分:0)

如果用户(或他们的角色)是您正确的域对象,并且正在改变Index()方法的结果,那么Index方法本身应该将所述用户作为参数,首先关闭。

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

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

这样的事情,然后:

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

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