如何在ASP.NETMVC中为整个区域设置授权?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我有一个管理员区域,我只希望管理员进入该区域。我考虑将管理区域中的每个控制器都添加授权属性。没有一个优雅的解决方案,或者该框架本身没有这个功能吗?

提问于
用户回答回答于

几乎应该在MVC应用程序中使用基于Web.config的安全性。原因是多个URL可能会触及控制器,并且将这些检查放在Web.config中总会漏掉一些东西。请记住 - 控制器不与区域相关联,路径与区域相关联。如果没有冲突,MVC控制器工厂将非常乐意为区域/文件夹服务于非区域请求的控制器。

例如,使用默认的项目结构,添加一个AdminDefaultController的Admin区域,可以通过/ Admin / AdminDefault / Index / AdminDefault / Index 命中该控制器。

唯一受支持的解决方案是将属性放在控制器基类上,并确保该区域内的每个控制器将该基类继承为子类。

用户回答回答于

我刚刚正在调查这个相同的问题。由于不能根据区域来保护控制器,所以想到一个更简单的选项。

为覆盖Controller的每个区域创建一个基本控制器定义,并将安全要求添加到此处。然后,您只需确保区域中的每个控制器都会覆盖AreaController而不是Controller。例如:

/// <summary>
/// Base controller for all Admin area
/// </summary>
[Authorize(Roles = "Admin")]
public abstract class AdminController : Controller { }

它仍然要求你从这个基地派生管理区域中的每个控制器,

public class HomeController : AdminController
{
    // .. actions
}

但至少你有一个单点来定义该区域的安全性。

扫码关注云+社区