【问题标题】:ASP.NET MVC: Share data between AuthorizeAttribute and ControllerASP.NET MVC:在 AuthorizeAttribute 和 Controller 之间共享数据
【发布时间】:2013-09-11 08:46:52
【问题描述】:

我正在使用 AuthorizeAttribute 来检查用户在我的控制器上执行操作的能力。我希望能够将某些用户会话添加到“黑名单”,以便 AuthorizeAttribute 将来拒绝他们的请求。除了使用数据库层之外,还有没有可能做到这一点?

【问题讨论】:

  • 如果没有数据库,您如何提出这项工作?

标签: c# asp.net asp.net-mvc authentication


【解决方案1】:

您可以创建一个自定义的 blacklist 类来覆盖 AuthorizeCore

public class BlackListAttribute : AuthorizeAttribute
{
   public string BlackListedUsers { get; set; }
   protected override bool AuthorizeCore(HttpContextBase httpContext)
   {
      if (_blackListedUsers.Contains(user))
      {
         return false;
      }
   }
}

然后在你的控制器上:

[BlackList(BlackListedUsers="name, name2, name3")]
public ActionResult YourActionMethod() 
{
      return View();
}

【讨论】:

  • 这几乎是我的想法,但是如何从 Controller 访问黑名单?
  • 你可以通过:BlackList(blacklist=list); - 您将需要 BlackList 类中的黑名单属性。会更新。
  • 看起来很有希望,不幸的是它产生了错误“yourList 不是有效的命名属性参数,因为它不是有效的属性参数类型”。根据这篇文章:link 看起来你不能将这样的变量作为参数传递给属性类。
  • @SzymonDrosdzol - 你必须使用简单的类型,例如字符串。
  • 嗯,这非常接近解决我的问题。问题是,属性类不接受非静态字段/属性作为参数。从我在这里读到的内容:link 在 ASP.NET 类中保留静态字段是一个丑陋的想法,尽管我不清楚为什么。问题是我应该关心吗?
猜你喜欢
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2019-03-29
相关资源
最近更新 更多