2014-11-21 198 views
7

我對面的特徵標記概念迷迷糊糊的,一個流行的開源Java的lib這個叫Togglz,其中引用了Martin Fowler的博客文章:功能檢舉VS授權

的基本思想是有一個配置文件,它定義了你有待處理的各種功能的一組切換。正在運行的應用程序然後使用這些切換來決定是否顯示新功能。

但對我來說,這真的聽起來像授權被授權查看該內容的用戶?

例如,用戶應該能夠看到FizzBu​​zz菜單嗎?

在Togglz我會實現這個檢查,像這樣:

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

,比方說,阿帕奇四郎,我可以做同樣的事情:

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

再次,功能標記只是感覺與角色或許可檢查一樣具有相同的確切問題。

我敢肯定我錯了,但我看不出如何。所以我問:功能標記與授權和角色/權限檢查有什麼不同,以及具體用例的哪種類型可以說明這種差異?換句話說:何時應該使用授權/角色/權限檢查,以及何時應使用功能標誌?

回答

2

我將使用Mr. Fowlers terminology對於兩種類型的功能切換的:

  • 業務切換:將是所有國家都支持長期配置功能。
  • 發佈切換:意味着幫助從舊的或不存在的實現過渡到「新」實現。與此相關的意圖是在工作完成後退休的老工作方式。這使您可以在「新」方式未完成時保留當前的工作方式。大多數人同意這些應儘可能避免。

如何標記功能比授權和角色/權限檢查不同,以及什麼類型的具體使用情況舉例說明這種差異?

我認爲授權和角色/權限檢查是商業切換實施下的配置。身份驗證是您的業務切換功能,Shiro可以幫助您配置和執行身份驗證功能。 Togglz是用於實現業務切換或版本切換的框架。它可以用於認證特徵

如果使用Togglz來開啓/關閉身份驗證,然後四郎執行用戶的配置,你的代碼應該是這樣的:

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

您可能選擇忘記功能切換,因爲您總是要驗證開啓。切換隻是引入額外的支票和技術債務。

什麼時候應該使用授權/角色/權限檢查,以及何時應該使用功能標誌?

我認爲這個決定取決於你。我會說授權是一項功能,您可以使用Shiro來實現它。您的應用程序可能有許多其他功能超出Shiro的範圍,並使您想使用Togglz打開和關閉它們。我認爲任何複雜的功能仍然需要配置來驅動業務邏輯。

0

切換與用戶無關,全部是關於啓用或不啓用每個人的功能。

它允許您開發新功能,測試它們,將它們發送到生產而不被激活(請參閱持續集成,持續交付)。其中一個興趣是儘早整合新代碼,並避免從生產中看到正在進行的工作。

1

我不會回答Togglz背後的邏輯。在FF4J文檔(針對Java的功能翻轉)中,您可以找到一個清晰的架構來解釋不同之處。

Feature Toggle vs Authorization

一個特徵是一個處理,其可啓用和通過專用網絡控制檯的運行時禁用的功能。這應該是主要驅動程序切換您的代碼:我需要通過配置激活/禁用?

一旦您確定Feature Toggle機制將具有很大價值(您可以在ff4J.org頁面的底部找到一些用例),您可以檢查權限。

檢查功能切換上下文的權限切換上下文旨在執行「加納利版本」:在爲所有人開放之前,爲有限的用戶子集打開一項新功能。