【问题标题】:MVC Authorize attribute denyMVC 授权属性拒绝
【发布时间】:2010-10-25 22:02:04
【问题描述】:

我正在使用Authorize() 属性来保护我的控制器/操作,并且只想向未经身份验证的用户显示登录操作 - 或者换句话说,拒绝经过身份验证的用户访问。

我在网上找不到任何关于拒绝许可或允许否定许可(即 !LoggedIn)的内容

有人可以指点我正确的方向吗?

MVC2、.Net 4

编辑:为了澄清,我想要这样的东西:

Public Class PublicController
    Inherits ControllerBase

    <Authorize()> 'Only logged-in users can logout
    Public Function Logout() as ActionResult
        Return View()
    End Function

    'Something here to indicate that only NON-authorized users should see this action
    Public Function Login() as ActionResult
        Return View()
    End Function

End Class

【问题讨论】:

  • 不清楚您的问题是什么。默认情况下,您使用[Authorize] 装饰的任何控制器/操作方法将仅限于经过身份验证的用户。换句话说,如果您没有登录,您将无法执行这些控制器/操作。您还想限制/允许什么?
  • 这里只是猜测,Basiclife;您的意思是,如果某人已经登录,但只是没有使用接受角色/用户名的 Authorize() 版本的适当角色,您希望将他们以外的其他内容定向到登录页面?
  • 如果 Andrew 是正确的,在 google 中使用“mvc authorize”快速搜索会产生类似:davidhayden.com/blog/dave/archive/2009/04/09/…
  • 对不起,我的错,我不清楚 - 我会编辑问题
  • 我建议你看看创建一个自定义的 ActionMethodSelectorAttribute。如此处所述:stackoverflow.com/q/2383094/148403

标签: asp.net-mvc vb.net authorization


【解决方案1】:

可以这么简单吗:

public class DenyAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return !base.AuthorizeCore(httpContext);
    }
}

【讨论】:

  • 有趣的想法 - 唯一的问题是我正在使用属性来允许 Telerik 菜单安全地修剪我的站点地图 - 我不确定它是否会检测到自定义属性(尽管我希望如此! )。我会试一试并在一天左右回复您
  • @Basiclife - 我熟悉他们的一些东西,应该可以很好地选择自定义属性。 - 这也是您应该在问题中包含的内容。您希望将其与哪种组件集成会改变答案。
  • 这段代码有两个严重的安全漏洞。首先,对于未调用 AuthorizeCore,应用了 AllowAnonymousAttribute - 在这种情况下拒绝规则将无法执行。其次,简单地否定基本结果(!base.AuthorizeCore)不会正确应用规则。如果同时指定“用户”和“角色”,则角色规则将无法评估。
猜你喜欢
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多