区分自定义授权控制器和操作

时间:2018-03-10 00:15:25

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

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

export const PlayersIndex = new Index({
  collection: Stocks,
  fields: ['Player', 'Team'],
  engine: new MinimongoEngine(),
});

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

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

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

1 个答案:

答案 0 :(得分:0)

基于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);
  ...
}