2

我正在尝试将一些 MVC3 功能混合到现有的 WebForms 应用程序中。我已经遵循了一些指南,并且除了授权部分之外的所有内容都已设置并正常工作。现有应用程序<deny users="*" />位于根 web.config,每个子文件夹都有自己的 web.config,允许访问特定角色中的页面。

我的新理解是这种风格不能/不应该在控制器上使用,我应该使用Authorize属性来代替。我已经用 装饰了我的测试“ HomeController”类[Authorize(Roles="AdminRole")],但是当我尝试查看该页面时,我得到了一个“拒绝访问”页面。

如果我将根 web.config 更改为<allow users="*" />,则该页面有效。这是否意味着我添加到控制器的属性正在工作,但根 web.config 设置优先于它?我不想弄乱我们现有的授权内容,因为该网站已经建立良好,我只是想添加 MVC 来玩。我错过了什么吗?感谢您提供的任何见解。

4

1 回答 1

1

啊,这有点棘手,因为您正在尝试在已经使用 Web 窗体的应用程序中使用 MVC 安全性。如果这是纯 mvc,则选择很简单。如果您不能将 mvc 功能提取到一个单独的应用程序中,那么这会让您有点麻烦。

我的第一个建议是尝试提取代码。如果您使用 MVC 仅提供安静的功能,也可以查看 MVC4 web api 为您的应用程序提供 api 并共享它们之间使用的组件,这需要将它们从您的 web 应用程序中拉出到域库或其他一些适当命名的组件中图书馆。

话虽如此,并不是 100% 确定 allow users="*" 是否按预期工作,但我相信确实如此。它很容易测试,只需将 Roles="AdminRole" 更改为 Roles="placeholder" 并重试。

设置它虽然会杀死你的其余身份验证,所以一个想法可能是将所有 mvc 路由放在特定的 url 下,例如“/api/”并允许 web.config 中的 * 到该路径,然后在所有路径上使用 mvc 的安全性你的控制器方法。这对您的主要网络应用程序的影响很小。

于 2012-05-22T15:10:04.917 回答