旁路或发展过程中关闭[授权(角色=“”)]?(Bypass or turn off [Authori

2019-08-03 17:13发布

构建MVC3应用程序,并TPTB希望我们使用他们的自定义授权提供。 然而,在开发过程中这种身份验证提供者是一种痛苦,因为它要么给出错误直到你关闭/重新启动浏览器,否则会要求您重新登录o在每一个编译。

现在,我刚添加<authentication mode="None"/>到web.config,直到我遇到一个使用一个操作或控制器,其工作正常[Authorize(Roles = "Admin")]过滤器(它可以是任何的作用,而不仅仅是管理员)。 当它击中其中之一,它只是呈现一个空白页。

有没有办法在全球和暂时将这些过滤器了吗? 或者只是给用户的所有角色,而我在开发我?

编辑

让我clarify-我从MVC2大型应用程序实际移植到MVC3。 它有很多的[Authorize(Roles="Admin")][Authorize(Roles="Admin,Editor")]贯穿它。 我宁愿不改变所有这些如果可能的。

我应该创建一个小的自定义角色提供程序自动给所有的角色?

Answer 1:

你可以写一个自定义的授权过滤器,将不执行,如果请求来自任何检查localhost

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Request.Url.IsLoopback)
        {
            // It was a local request => authorize the guy
            return true;
        }

        return base.AuthorizeCore(httpContext);
    }
}


Answer 2:

您可以从继承AuthorizeAttribute并配有独立的实现#if DEBUG指令。

public class MyAuthorizeAttribute: AuthorizeAttribute
{
#if DEBUG
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return true;
    }
#endif
}

#define YOUR_OWN_FLAG在任何构建,调试或发行开启和关闭的行为。



Answer 3:

对于Web API:

public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext);
    }
}


文章来源: Bypass or turn off [Authorize(Roles=“”)] during development?