新授权模型中的复杂条件(AND/OR)-ASP.NET Core



当需要处理复杂的AND/OR条件时,我在解决ASP.NET Core中的授权逻辑时遇到困难。在我的API方法获得授权之前要检查的条件示例:

A & (B | C & D & E | C & F)    - each condition consists of 1 or more checks

我知道所有可用的授权类型(包括基于策略和基于资源的)。

一般来说,使用新的授权模型,我不确定如何处理OR条件。

我知道我可以为OR条件创建授权处理程序,但我觉得这还不够(在我的示例中,我认为我不能为(B) | (C & D & E) | (C & F)创建一个具有3个授权处理程序的需求,因为这太笨重了,尤其是如果由于业务模型规则的原因,将这些条件组合在一起没有意义的话)。

我也理解授权处理程序不能相互依赖。此外,我认为一个处理程序不能更一般地与多个需求相关联。

有其他方法来处理这些情况吗?如何将复杂性分解成简单的小部分来解决这些问题,有没有一个通用的规则?

我建议您创建自己的中间件+自定义属性来处理此类情况。此外,您还需要定义二进制枚举来处理这样的规则:

[CustomAuthorization(GroupA.A | GroupB.A & GroupC.D))]

最新更新