Asp.net mvc 3 自定义表单验证+;MVC3和x2B;授权属性

Asp.net mvc 3 自定义表单验证+;MVC3和x2B;授权属性,asp.net-mvc-3,forms-authentication,Asp.net Mvc 3,Forms Authentication,我基本上是在做。然而,每当我使用内置的authorized属性时,MVC框架(我猜)从来不会查看我的主体来确定用户是否具有适当的角色。它一直试图在app_数据目录中创建一个新的MDF文件,因为它没有特权,所以它崩溃了 这是预期的行为吗?我是否应该导出自己的属性并自己检查主体 要指出的另一个奇怪行为是,我在同一个域上有两个站点,我正在为它们进行单点登录。在这两个站点上,我都使用相同的类库在AuthenticateRequest上重新创建我的自定义主体,在调试时,我看到每个站点上的主体设置正确。但是

我基本上是在做。然而,每当我使用内置的authorized属性时,MVC框架(我猜)从来不会查看我的主体来确定用户是否具有适当的角色。它一直试图在app_数据目录中创建一个新的MDF文件,因为它没有特权,所以它崩溃了

这是预期的行为吗?我是否应该导出自己的属性并自己检查主体


要指出的另一个奇怪行为是,我在同一个域上有两个站点,我正在为它们进行单点登录。在这两个站点上,我都使用相同的类库在AuthenticateRequest上重新创建我的自定义主体,在调试时,我看到每个站点上的主体设置正确。但是,站点1(向用户进行身份验证的站点)使用内置的AuthorizeAttribute,它工作得很好,但是站点2在调用任何具有AuthorizeAttribute的操作时都试图创建MDF文件。

默认情况下,新的MVC3应用程序使用SqlMembershipProvider作为默认授权机制,并尝试将详细信息存储在SQLExpress数据库(MDF文件)中

因此,请尝试在web.config中清除:

<membership>
   <providers>
      <clear />
   </providers>
</membership>

只要您正确地实现了所有安全对象(
IPrincipal
IIdentity
),并且在
应用程序上取消了表单身份验证票证的类型,内置的
[Authorize(RoleName=“RoleName”)]
就应该适合您


在你发布的链接中,这是我们正在做的事情,而且效果很好。

好的,我想出来了,我必须将它添加到system.webServer下的web配置中。这将删除替换我的主体的HttpModule

<modules runAllManagedModulesForAllRequests="true">
    <remove name="RoleManager" />
</modules>


好的,我想我找到了更多的信息。在Global.asax文件中的PostAuthenticateRequest方法中,我的自定义主体对象将更改为RolePrincipal。如果我将自定义主体集逻辑移动到PostAuthenticateRequest方法中。一切正常,但我不必为其他站点执行此操作,而且我无法在它们的web.config文件之间找到差异。所以我真正想做的就是找出是什么将我的主体更改为RolePrincipal对象,并禁用它。谢谢你的回答。我已经尝试了你的建议(之前几次,为了安全起见再次尝试),但我仍然得到了角色原则,而不是我在Application_AuthenticateRequest中设置的自定义原则。有什么想法吗?我甚至试过:
感谢您识别出了有问题的模块。请考虑不要使用模块属性<代码> RunAlMauldMeaveFraceReals=“true”< /代码>。其他人说,因为模块甚至可以在jpg图像请求之类的东西上运行。这可能是浪费资源。只是去掉了角色管理器对我有用。