首页 文章

开发期间绕过或关闭[授权(角色=“”)]?

提问于
浏览
19

构建MVC3应用程序,TPTB希望我们使用他们的自定义授权提供程序 . 但是,在开发过程中,这个身份验证提供程序很麻烦,因为它会在您关闭/重新启动浏览器时发出错误,或者需要您在每次编译时重新记录o .

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

全球有没有办法暂时关闭这些过滤器?或者只是在我开发时为用户提供所有角色?

EDIT

让我澄清一下 - 我实际上正在将一个大型应用程序从MVC2移植到MVC3 . 它有很多 [Authorize(Roles="Admin")][Authorize(Roles="Admin,Editor")] . 如果可能的话,我宁愿不改变所有这些 .

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

3 回答

  • 15

    您可以编写自定义授权过滤器,如果请求来自 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);
        }
    }
    
  • 31

    您可以从 AuthorizeAttribute 继承并使用 #if DEBUG 指令单独实现 .

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

    #define YOUR_OWN_FLAG 在任何构建,调试或发布中打开和关闭行为 .

  • 7

    对于Web API:

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

相关问题