Пометка функций и авторизация
Я просто наткнулся на концепцию пометки функций и популярную Java- библиотеку с открытым исходным кодом для этого под названием Togglz, которая цитирует пост в блоге Мартина Фаулера:
Основная идея заключается в том, чтобы иметь файл конфигурации, который определяет набор переключателей для различных функций, которые вы ожидаете. Затем запущенное приложение использует эти переключатели, чтобы решить, отображать или нет новую функцию.
Но для меня это действительно звучит как авторизация: авторизован ли пользователь для просмотра этого контента?
Например, должен ли пользователь видеть меню FizzBuzz или нет?
В Togglz я мог бы реализовать эту проверку следующим образом:
if(MyFeatures.ShowFizzBuzz.isActive()) {
// Show the FizzBuzz menu.
}
Например, в Apache Shiro я мог бы сделать то же самое:
ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
// Show the FizzBuzz menu.
}
Опять же, пометка функций кажется такой же проблемой, как и проверка ролей или разрешений.
Я уверен, что я не прав, но я не понимаю, как. Поэтому я спрашиваю: чем разметка функций отличается от проверки полномочий и ролей / разрешений, и какие типы конкретных вариантов использования иллюстрируют это различие? Другими словами: когда я должен использовать проверку авторизации / роли / разрешения и когда мне следует использовать флаги функций?
3 ответа
Я собираюсь использовать терминологию мистера Фаулерса для двух типов переключателей функций:
- Business Toggle: это функции с долгоживущей конфигурацией, в которых поддерживаются все состояния.
- Release Toggle: предназначен для того, чтобы помочь перейти от старой или несуществующей реализации к "новой". Намерение с этим состоит в том, чтобы удалить старый способ работы, когда работа сделана. Это позволяет вам, когда вы хотите сохранить текущий способ работы, пока "новый" способ не завершен. Большинство людей согласны, что их следует избегать, когда это возможно.
Чем разметка функций отличается от авторизации и проверки ролей / разрешений, и какие типы конкретных вариантов использования иллюстрируют это различие?
Я думаю, что авторизация и проверка ролей / разрешений являются настройкой в рамках реализации Business 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 для их включения и выключения. Я утверждаю, что любая сложная функция по-прежнему требует настройки для управления вашей бизнес-логикой.
Я не буду отвечать за логику за Togglz. В документации FF4J (переключение функций для Java) вы можете найти кристально чистую схему, которая объясняет разницу.
Функция - это процедура, функция, которую можно включать и отключать во время выполнения через специальную веб-консоль. Это должен основной драйвер для переключения вашего кода: мне нужно активировать / деактивировать через конфигурацию?
Как только вы определите, что механизм Feature Toggle будет иметь большое значение (вы можете выбрать вариант использования в нижней части страницы ff4J.org), вы можете проверить разрешения.
Проверка разрешений в контексте переключения функций предназначена для выполнения " Канарского выпуска ": откройте новую функцию для ограниченного круга пользователей, прежде чем открывать для всех.
Переключение не имеет ничего общего с пользователями, это все о функциях для всех, которые включены или нет.
Он позволяет разрабатывать новые функции, тестировать их, отправлять в производство без активации (см. Непрерывную интеграцию, непрерывную доставку). Один из интересов заключается в том, чтобы как можно раньше интегрировать новый код и избегать незавершенной работы, чтобы ее можно было увидеть с производства.