我添加了AuthorizeAttribute来保护我的ActionResult。
[Authorize(Roles = "MyUser, Admin")]
public ActionResult Index()
{
var allData = myDataRepository.FindAllData();
return View(allData);
}
“索引”视图显示我的表中的数据列表。我想显示1行是用户角色是MyUser,如果角色是Admin,则显示所有行。
正确的(MVC)方式只是检查用户角色并执行if else吗?
答案 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方法中,您可以对权限或任何内容进行任何过滤。