0

这是我的问题,

我有一个带有名为“ UserActivationStrategy ”的自定义策略的功能开关。它所做的只是,它在Id字段中有一个硬编码值作为“用户” ,一个作为参数的“ IpAddress ”和一些逻辑在isActive(state,user)中返回真/假。

因此,要调用的策略是根据硬编码的Id确定的。这是我定义的 application.properties

CustomFeature = true
CustomFeature.strategy= user
CustomFeature.param.IpAddress= xx.xx.xxx

以上说明 ....UserActivationStrategy 是基于在策略中硬编码的 Id('user') 调用的。在 UserActivationStrategy 中,我正在验证 Ipaddress 并返回真/假。

那么,如果我需要对具有不同 IpAddress 的不同用户执行相同的逻辑呢?它像组合。某些用户有权访问某些 IpAddress。

我无法为每个用户或每个 IPAddress 创建功能开关。它将创建许多功能开关。

如果我在策略中添加用户和 IPAddress 作为参数。我最终在单一策略中创建了许多参数,这是不好的。

对此的任何解决方案表示赞赏。谢谢。

4

2 回答 2

1

我不确定我是否完全理解你想要达到的目标。所以你有一个单一的功能标志,如果激活,它应该评估true是否且仅当用户和 IP 地址的特定组合存在?

如果是这样,您也许应该创建一个可以使用编码所有允许组合的字符串配置的单一策略。就像是:

user1=127.0.0.1, user2=127.0.0.2, user3=127.0.0.3

然后,您可以在管理控制台中配置此配置字符串。或者直接添加到配置文件中:

CustomFeature = true
CustomFeature.strategy= user
CustomFeature.param.combintations=user1=127.0.0.1, user2=127.0.0.2

该策略必须解析此表示并检查允许的组合之一。

于 2017-02-11T09:20:08.107 回答
0

所以我想出了解决方案。在我的 features.properties 中,我将用户列表作为参数。

例子:

CustomFeature.param.user1=127.0.0.1,127.0.0.2
CustomFeature.param.user2=127.0.0.1,127.0.0.3

因此,我在返回所有 IPAddress 的激活策略中获得了 featurestate.getparameter(user1)。因此,基于该 IP 地址,我将启用/禁用功能开关。

因此,这种策略避免了我创建许多参数/功能开关。

于 2017-02-17T23:13:44.780 回答