【问题标题】:MVC Authorize Attribute for Release Version only仅发布版本的 MVC 授权属性
【发布时间】:2012-01-20 13:05:22
【问题描述】:

是否可以用;来装饰班级

[Authorize(Roles = "Admin")]

但它是否仅在您以发布模式构建应用程序时适用?

所以在调试模式下,没有应用授权,您无需登录即可进入管理页面。

我的管理屏幕不需要任何特殊的用户信息,只要您是否登录即可。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    一种方法是创建一个自定义 Authorize 属性,然后像这样使用#if DEBUG:

    public class SwitchableAuthorizationAttribute : AuthorizeAttribute
    {
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool disableAuthentication = false;
    
        #if DEBUG
        disableAuthentication = true;
        #endif
    
        if (disableAuthentication)
            return true;
    
        return base.AuthorizeCore(httpContext);
    }
    }
    

    从这里复制: http://www.diaryofaninja.com/blog/2011/07/24/writing-your-own-custom-aspnet-mvc-authorize-attributes

    【讨论】:

    • 嗯,这是标准的 mvc 授权属性,我有点不愿意自己替换它。认为会有更好的方法
    • 您唯一要做的就是添加自定义逻辑以查看当前构建模式并应用授权或不应用授权。您不是自己滚动,而是从过滤器继承而来,因此它的性能与您请求的异常完全相同。
    • 我发现这不适用于 OWIN WS-Federation 身份验证...可能是因为 OWIN 是作为应用程序插件嵌入的。一旦在启动时配置了 OWIN,自定义 AuthorizeAttributes 就不会绕过它。
    【解决方案2】:

    您可以设置编译器指令:

     #if DEBUG
      //Add code here
      #else
      //add code here
      #endif
    

    但我不肯定他们会使用元数据属性。您还可以通过从 MVCm 中包含的一个继承来创建自己的自定义授权过滤器覆盖验证方法,然后将我概述的代码作为部分审计包含在内,这样您就可以在调试模式下绕过它,只是永远不要在 DEBUG 中编译和部署它。

    您还可以检查调试器是否附加在您的自定义授权过滤器中:

     System.Diagnostics.Debugger.IsAttached 
    

    【讨论】:

    • 无论我处于调试模式还是发布模式,都不会忽略该属性
    • 查看 Omri 发布的内容,这是我建议的替代方案,创建您自己的 Authorize 过滤器并将指令添加到授权事件中。
    猜你喜欢
    • 2016-12-06
    • 2013-10-22
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2015-03-03
    相关资源
    最近更新 更多