我们的网站具有复杂的管理层次结构,并且存在一些行为拆分。为了最好地引导用户流量,我创建了名为MangersOnly,AdminOnly,NonAdmins的授权过滤器。
我设想以这种方式使用它们
[MangersOnly]
public ActionResult Index()
{
}
[AdminOnly]
public ActionResult Index()
{
return redirectoaction("Index", "Admins");
}
[NonAdmins]
public ActionResult Index()
{
return redirectoaction("Shouldntbehere", "Errors");
}
我遗憾地发现,属性并不会影响我的行动方法。
这种架构是为了避免我们必须做的所有逻辑检查(如果角色这个或那个停留,否则重定向到这里或那里......)。目标是将流量引导到授权属性不会失败的操作方法。
有没有办法可以重载这些方法(不改变它们的参数或名称),保持这种甜蜜(天真)的架构来引导用户?
答案 0 :(得分:1)
在C#(和我能想到的任何其他语言)中,你不能有多个具有相同签名的方法(MVC或不具有)(属性不是签名的一部分);所以这种做法无法奏效。
如何根据用户的权限生成视图中的锚链接()),例如IndexManager,IndexAdmin等,并正常添加基于角色的安全性。名称IndexManager
在这里没有意义,这会让我更多地考虑用户在做什么,这是一个更好的名称吗?只有您知道自己的域名才能回答这个问题。
或者使用基本控制器获取常用功能,并继承每个安全级别行为。
您可能还想考虑基于权限的过滤而非基于角色,请参阅http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
答案 1 :(得分:0)
如果应用程序的外观和感觉因用户而异,则可以始终使用MVC区域。我开发了几个应用程序,我使用此功能,基于登录,将用户定向到特定区域,并定制所有内容访问和交付给特定用户组。
例如,我有一个网站,其中有一个登录,并且根据您是谁(客户支持或客户),您被定向到不同的区域,这些区域都使用相同的DAL逻辑来获取信息,但控制器可以过滤它给了该地区。这也使得将营销材料与订单服务和其他处理逻辑分开非常容易。我非常喜欢这些文章:
MVC5区域 - http://www.itorian.com/2013/10/area-in-mvc-5-with-example-step-by-step.html
基于登录的重定向 - ASP.NET MVC 5 Identity 2 Login redirect based on user role