我偶然发现了功能标记的概念,以及一个名为Togglz的流行开源Java库,它引用了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.
}
同样,功能标记只是感觉就像它与角色或权限检查一样的确切问题。
我确定我错了,但我不知道怎么回事。所以我问:功能标记与授权和角色/权限检查有何不同,具体用例是什么类型的例子?换句话说:我何时应该使用授权/角色/权限检查,何时应该使用功能标记?
答案 0 :(得分:3)
我将使用Mr. Fowlers terminology来表示两种类型的功能切换:
功能标记与授权和角色/权限检查有何不同,具体用例的具体类型是什么?
我认为授权和角色/权限检查是Business Toggle实现下的配置。身份验证是您的业务切换功能,Shiro将是一个帮助您配置和实施身份验证功能的工具。 Togglz是实现Business Toggles或Version Toggles的框架。 可以用于身份验证功能
如果您使用Togglz打开/关闭身份验证,然后使用Shiro来强制执行用户配置,那么您的代码将如下所示:
if(MyFeatures.ShowFizzBuzz.isActive()) {
ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
// Show the FizzBuzz menu.
}
}
您可以选择忘记功能切换,因为您始终需要启用身份验证。切换只是引入额外的支票和技术债务。
我应该何时使用授权/角色/权限检查,何时应使用功能标记?
我认为这个决定取决于你。我会说授权是一个功能,你可以使用Shiro来实现它。您的应用程序可能具有超出Shiro范围的许多其他功能,并且您希望使用Togglz打开和关闭它们。我认为任何复杂的功能仍然需要配置来驱动您的业务逻辑。
答案 1 :(得分:1)
我不会回答Togglz背后的逻辑。在FF4J文档(针对Java翻译的功能)中,您可以找到一个解决差异的cristal clear架构。
功能是一种处理,一种可以在运行时通过专用Web控制台启用和禁用的功能。这应该是切换代码的主要驱动因素:我是否需要通过配置激活/停用?
一旦您确定功能切换机制具有很大价值(您可以在ff4J.org页面底部选择一些用例),您可以检查权限。
检查功能切换上下文中的权限是为了执行" Canary Release " :在为所有人开放之前,为有限的用户子集打开一个新功能。
答案 2 :(得分:0)
切换与用户无关,它与所有启用或未启用的功能有关。
它允许您开发新功能,测试它们,将它们发送到生产中而不被激活(参见持续集成,持续交付)。其中一个兴趣是尽早整合新代码,避免从生产中看到正在进行的工作。