功能标记与授权

时间:2014-11-21 15:25:37

标签: java security authorization featuretoggle togglz

我偶然发现了功能标记的概念,以及一个名为Togglz的流行开源Java库,它引用了Martin Fowler博客文章:

  

基本思想是拥有一个配置文件,为您要挂起的各种功能定义一堆切换。然后,正在运行的应用程序使用这些切换来决定是否显示新功能。

但对我而言,这听起来像授权用户是否有权查看此内容?

例如,用户是否应该能够看到FizzBu​​zz菜单?

在Togglz中,我可能会这样执行此检查:

if(MyFeatures.ShowFizzBuzz.isActive()) {
    // Show the FizzBuzz menu.
}

比方说,Apache Shiro,我可以做同样的事情:

ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
    // Show the FizzBuzz menu.
}

同样,功能标记只是感觉就像它与角色或权限检查一样的确切问题。

我确定我错了,但我不知道怎么回事。所以我问:功能标记与授权和角色/权限检查有何不同,具体用例是什么类型的例子?换句话说:我何时应该使用授权/角色/权限检查,何时应该使用功能标记?

3 个答案:

答案 0 :(得分:3)

我将使用Mr. Fowlers terminology来表示两种类型的功能切换:

  • Business Toggle:将是支持所有状态的长期配置的功能。
  • Release Toggle:意图帮助从旧的或不存在的实现过渡到'新'的实现。这个的目的是在工作完成后退出旧的工作方式。这使您可以在未完成“新”方式时保留当前的工作方式。大多数人都认为应该尽可能避免这些。
  

功能标记与授权和角色/权限检查有何不同,具体用例的具体类型是什么?

我认为授权和角色/权限检查是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架构。

Feature Toggle vs Authorization

功能是一种处理,一种可以在运行时通过专用Web控制台启用和禁用的功能。这应该是切换代码的​​主要驱动因素:我是否需要通过配置激活/停用?

一旦您确定功能切换机制具有很大价值(您可以在ff4J.org页面底部选择一些用例),您可以检查权限。

检查功能切换上下文中的权限是为了执行" Canary Release " :在为所有人开放之前,为有限的用户子集打开一个新功能。

答案 2 :(得分:0)

切换与用户无关,它与所有启用或未启用的功能有关。

它允许您开发新功能,测试它们,将它们发送到生产中而不被激活(参见持续集成,持续交付)。其中一个兴趣是尽早整合新代码,避免从生产中看到正在进行的工作。

相关问题