我刚刚偶然发现了特性标记的概念,以及一个流行的开源 Java 库,称为Togglz,它引用了 Martin Fowler 的博客文章:
基本思想是有一个配置文件,它为你有待处理的各种功能定义了一堆切换。然后,正在运行的应用程序使用这些切换来决定是否显示新功能。
但对我来说,这听起来真的很像授权:用户是否有权查看此内容?
例如,用户是否应该能够看到 FizzBuzz 菜单?
在 Togglz 中,我可能会像这样实现此检查:
if(MyFeatures.ShowFizzBuzz.isActive()) {
// Show the FizzBuzz menu.
}
在 Apache Shiro 中,我可以做同样的事情:
ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
// Show the FizzBuzz menu.
}
再次,功能标记感觉就像它与角色或权限检查完全相同的问题。
我确定我错了,但我不知道怎么做。所以我问:功能标记与授权和角色/权限检查有何不同,哪些类型的具体用例体现了这种差异?换句话说:什么时候应该使用授权/角色/权限检查,什么时候应该使用功能标志?