Java 功能标记与授权
我刚刚偶然发现了特性标记的概念,以及一个流行的开源Java库,它引用了Martin Fowler的一篇博文: 其基本思想是拥有一个配置文件,该文件为您拥有的各种待定功能定义了一系列切换。然后,正在运行的应用程序使用这些切换来决定是否显示新功能 但对我来说,这听起来真的像是授权:用户有权查看此内容吗 例如,用户是否应该能够看到FizzBuzz菜单 在Togglz中,我可以这样实现此检查:Java 功能标记与授权,java,security,authorization,featuretoggle,togglz,Java,Security,Authorization,Featuretoggle,Togglz,我刚刚偶然发现了特性标记的概念,以及一个流行的开源Java库,它引用了Martin Fowler的一篇博文: 其基本思想是拥有一个配置文件,该文件为您拥有的各种待定功能定义了一系列切换。然后,正在运行的应用程序使用这些切换来决定是否显示新功能 但对我来说,这听起来真的像是授权:用户有权查看此内容吗 例如,用户是否应该能够看到FizzBuzz菜单 在Togglz中,我可以这样实现此检查: if(MyFeatures.ShowFizzBuzz.isActive()) { // Show th
if(MyFeatures.ShowFizzBuzz.isActive()) {
// Show the FizzBuzz menu.
}
比如说,在ApacheShiro中,我可以做完全相同的事情:
ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
// Show the FizzBuzz menu.
}
同样,功能标记感觉就像是角色或权限检查一样的问题
我肯定我错了,但我不知道怎么回事。所以我问:特性标记与授权和角色/权限检查有何不同,什么类型的具体用例举例说明了这种差异?换句话说:什么时候应该使用授权/角色/权限检查,什么时候应该使用功能标志?我将用于两种类型的功能切换:
- 业务切换:将是支持所有状态的长期配置功能李>
- 释放切换:用于帮助从旧的或不存在的实现过渡到“新的”实现。这样做的目的是在工作完成后,放弃旧的工作方式。这使您能够在“新”方式未完成时保留当前工作方式。大多数人都同意在可能的情况下应该避免这些
if(MyFeatures.ShowFizzBuzz.isActive()) {
ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
// Show the FizzBuzz menu.
}
}
您可以选择忘记功能切换,因为您总是希望启用身份验证。切换只是引入了额外的检查和技术债务
何时应使用授权/角色/权限检查,何时应使用功能标志
我认为这个决定取决于你。我想说授权是一个特性,您可以使用Shiro来实现它。您的应用程序可能有许多超出Shiro范围的其他功能,并使您希望使用Togglz来打开和关闭它们。我认为任何复杂的功能都需要配置来驱动您的业务逻辑。我不会回答Togglz背后的逻辑。在文档(Java的功能翻转)中,您可以找到一个cristal clear模式来解释差异 功能是一种治疗,一种可以在运行时通过专用web控制台启用和禁用的功能。这应该是切换代码的主要驱动程序:是否需要通过配置激活/取消激活 一旦您确定了功能切换机制将具有很大的价值(您可以在ff4J.org页面底部选择一些用例),您可以检查权限 在功能切换上下文中检查权限意味着执行“金丝雀发布””:为有限的用户子集打开一个新功能,然后再为所有人打开