构建MVC3应用程序,并TPTB希望我们使用他们的自定义授权提供。 然而,在开发过程中这种身份验证提供者是一种痛苦,因为它要么给出错误直到你关闭/重新启动浏览器,否则会要求您重新登录o在每一个编译。
现在,我刚添加<authentication mode="None"/>
到web.config,直到我遇到一个使用一个操作或控制器,其工作正常[Authorize(Roles = "Admin")]
过滤器(它可以是任何的作用,而不仅仅是管理员)。 当它击中其中之一,它只是呈现一个空白页。
有没有办法在全球和暂时将这些过滤器了吗? 或者只是给用户的所有角色,而我在开发我?
编辑
让我clarify-我从MVC2大型应用程序实际移植到MVC3。 它有很多的[Authorize(Roles="Admin")]
和[Authorize(Roles="Admin,Editor")]
贯穿它。 我宁愿不改变所有这些如果可能的。
我应该创建一个小的自定义角色提供程序自动给所有的角色?
你可以写一个自定义的授权过滤器,将不执行,如果请求来自任何检查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);
}
}
您可以从继承AuthorizeAttribute
并配有独立的实现#if DEBUG
指令。
public class MyAuthorizeAttribute: AuthorizeAttribute
{
#if DEBUG
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
}
#endif
}
或#define YOUR_OWN_FLAG
在任何构建,调试或发行开启和关闭的行为。
对于Web API:
public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext);
}
}