gpt4 book ai didi

asp.net-mvc-2 - ASP.NET MVC 2 授权问题

转载 作者:行者123 更新时间:2023-12-01 13:03:11 25 4
gpt4 key购买 nike

我正在使用自定义成员(member)提供程序。一切都很好。但是,在我的 web.config 文件中,我启用了“拒绝用户”,因此整个网站都被锁定了。

这很好用。用户被重定向到登录页面。

现在,我有一些 Controller /操作要允许匿名访问。关于页面、密码重置等

我能弄清楚如何做到这一点的唯一方法是解锁整个站点,将 [Authorize] 属性放在每个 Controller 上,并为我想要匿名的 Controller /操作删除它们。

这对我来说似乎倒退了。我更喜欢默认锁定所有内容并解锁匿名内容。

有解决办法吗?

谢谢!

最佳答案

我可以想到其他方法来实现这一点,但它们都涉及使用自定义的 AuthorizeAttribute。一种方法是让一个基本 Controller 使用所有 Controller 派生自的自定义 AuthorizeAttribute。这个属性将被定制以防止匿名(和未经授权的)访问一个 Action ,除非它是 Controller 或 Action 本身已经用另一个属性修饰——比如 AnonymousEnabledAttribute。您的所有 Controller 都将派生自该 Controller ,因此继承了它的标准“默认无匿名”行为。然后,您只需使用 AnonymousEnabledAttribute 装饰您希望匿名的 Controller /操作——为该 Controller 或操作提供覆盖。或者,对于 Controller ,根本不继承 protected Controller ,它的所有操作都会公开。

哦,您的整个网站必须保持开放。

[OverridableAuthorize]
public abstract class ProtectedController : Controller
{
}

public class MostlyProtectedController : ProtectedController
{
public ActionResult ProtectedAction()
{
}

[AnonymousEnabled]
public ActionResult PublicAction()
{
}
}

[AnonymousEnabled]
public class ExplicitlyPublicController : ProtectedController
{
// inherits additional behaviors, but anonymous is enabled by attribute
}

public class PublicByOmissionController : Controller
{
// doesn't inherit and is thus public -- assuming whole site is open
}

public class AnonymousEnabledAttribute : Attribute
{
}

public class OverridableAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization( AuthorizationContext context )
{
context.HttpContext.Items["ActionDescriptor"] = context.ActionDescriptor;
base.OnAuthorize( context );
}

public override bool AuthorizeCore( HttpContextBase context )
{
var actionDescriptor = context.Items["ActionDescriptor"] as ActionDescriptor;
if (actionDescriptor == null)
{
throw InvalidOperationException( "ActionDescriptor missing from context" );
}
var attribute = actionDescriptor
.GetCustomAttributes( typeof(AnonymousEnabledAttribute,true)
.FirstOrDefault();
if (attribute == null)
{
return base.AuthorizeCore( context );
}
return true;
}
}

关于asp.net-mvc-2 - ASP.NET MVC 2 授权问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com