【问题标题】:Differentiate between custom Authorize on controller and action区分控制器上的自定义授权和操作
【发布时间】:2018-03-10 00:15:25
【问题描述】:

我创建了一个继承自 AuthorizeAttribute 的自定义 Authorize 属性。定制的一部分是记录用户对数据库的访问。

public class Authorization : AuthorizeAttribute
{ 
  ...
  dbRepo.LogAccessEntry(parameters);
  ...
}

我希望能够在控制器级别使用它以及对某些操作进行更精细的控制,例如以下示例:

[Authorization]
public class TestController : Controller
{
  public ActionResult Index()
  {
    ...
  }

  [Authorization (Roles="admin")
  public ActionResult SecureArea()
  {
    ...
  }

}

但是,这将导致自定义授权记录两次。我在这里查看答案https://stackoverflow.com/a/16713334/5473973,这将导致我使用覆盖属性,但不希望不必创建另一个属性来跟踪。有没有办法区分它被调用的级别或区分是否有其他属性要检查?只有在完成授权链后,才应记录访问。还是有更好的解决方案?

【问题讨论】:

标签: c# asp.net-mvc authorize-attribute


【解决方案1】:

根据 NightOwl888 的回复 (https://stackoverflow.com/a/49175535/5473973),我最终在自定义属性上使用了“AllowMultiple = false”属性。这允许操作属性覆盖控制器属性。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class Authorization : AuthorizeAttribute
{ 
  ...
  dbRepo.LogAccessEntry(parameters);
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2015-06-21
    • 2013-02-15
    • 2017-03-04
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多