0

我们的网站有一个复杂的管理层次结构,有一些行为分裂。为了最好地引导用户流量,我创建了名为 MangersOnly、AdminOnly、NonAdmins 的授权过滤器。

我设想以这种方式使用它们

[MangersOnly]
public ActionResult Index()
{
}


[AdminOnly]
public ActionResult Index()
{
      return redirectoaction("Index", "Admins");
}

[NonAdmins]
public ActionResult Index()
{
      return redirectoaction("Shouldntbehere", "Errors");
}

我遗憾地发现,属性并不能作为我的操作方法的重载。

这种架构是为了避免我们必须做的所有逻辑检查(如果这个或那个角色保持不变,否则重定向到这里或那里......)。目标是将流量引导到授权属性不会失败的操作方法。

有没有一种方法可以重载这些方法(不改变它们的参数或名称),保持这种甜蜜(天真的)架构来引导用户?

4

2 回答 2

1

在 C#(以及我能想到的任何其他语言)中,您不能拥有多个具有相同签名的方法(无论是否 MVC)(属性不是签名的一部分);所以这种方法行不通。

如何根据用户的权限(例如 IndexManager、IndexAdmin 等)生成锚链接(视图中),并正常添加基于角色的安全性。这些名称IndexManager在这里没有意义,这会让我更多地思考用户在做什么,这是一个更好的动作名称吗?只有您知道您的域才能回答这个问题。

或者使用基本控制器来实现通用功能并继承每个安全级别的行为。

您可能还想考虑基于权限的过滤而不是基于角色的过滤,请参阅http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/

于 2012-12-10T23:14:19.100 回答
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 基于用户角色的登录重定向

于 2015-04-03T14:05:58.013 回答