Лучший способ реализовать мелкомодульную авторизацию для веб-приложения?

Поддержка SQL от Flink основана на Apache Calcite, который реализует стандарт SQL. Поддержка SQL еще не завершена, но в последнее время в каждом новом выпуске появляются новые интересные функции, такие как временные таблицы и match_recognize, которые были добавлены в Flink 1.7.

Я считаю, эта часть документации содержит детали, которые вы ищете.

Чтобы узнать, как работать с Flink SQL, я рекомендую Apache Flink® SQL Training на github.

5
задан Can Berk Güder 10 November 2008 в 22:33
поделиться

3 ответа

Фундаментальное понятие авторизации, насколько я понимаю, является ролью. Роль может выразить различные вещи:

  1. отношение пользователя к системе в целом (например, быть администратором системы)
  2. отношение пользователя к некоторым объектам (например, быть модератором комментариев)
  3. отношение пользователя к некоторому конкретному объекту (например, быть владельцем некоторого ресурса)
  4. некоторое другое сложное отношение (например, быть другом пользователя, который является владельцем некоторого ресурса),
  5. у того пользователя есть некоторый атрибут (атрибуты), или он отвечает на некоторое сообщение некоторым конкретным способом (например, быть подростком)

Действительно мелкомодульная система авторизации должна позволить Вам определять роль для пользователя на основе любого из вышеупомянутых критериев. Кроме того, это должно позволить Вам устанавливать больше чем одну роль для пользователя. (Самые простые формы плагинов авторизации для направляющих обычно позволяют Вам, определяют просто первый вид ролей и устанавливают всего одну роль для пользователя.)

Другая часть authoriation является механизмом, который решает, какую часть кода работать (или не выполнить) на основе факта, если пользователь вписывается в некоторую роль (набор ролей) или нет. Для применения этого механизма мы должны найти точки, где авторизация должна произойти и выбрать роли, для которых код должен или не должен быть выполнен.

Путь, который работает на меня в направляющих, состоит в том, чтобы определить роли на образцовом уровне и оставить механизм авторизации (устанавливающий позволенный роли для частей кода, что я хочу быть авторизованным и выяснение, если у текущего пользователя есть роль, которой разрешают выполнить часть), полностью для контроллеров/представлений.

Для этого я использую настроенный плагин авторизации направляющих, который имеет все возможности, которые я просто упомянул созданный прямо в (различные виды ролей, многих ролей для одного пользователя, авторизации на контроллере и уровне представления).

3
ответ дан 15 December 2019 в 06:38
поделиться

Вы, возможно, должны представить понятие 'единиц функциональности' или 'функций' в Вашу модель как контрольные точки для доступа; 'функция' может иметь дополнительную 'родительскую функцию' для формирования иерархии. Вы добираетесь для решения то, что и не является функцией и проверкой на полномочия программно. Это должно также позволить Вам проверять на доступ уровня функции прежде, чем нарисовать меню, так, чтобы пользователи никогда не видели ссылки на страницы, к которым им не позволяют получить доступ.

аналогичная ситуация / решение описана здесь

0
ответ дан 15 December 2019 в 06:38
поделиться

Из Ваших двух предложений первая опция выглядит немного лучше, поскольку она позволяет Вам добавлять действия, которые не могут быть действиями образцового уровня. Я предполагаю, что Вы столкнетесь со случаем, где вторая модель не вполне делает достаточно, и Вы должны будете или изменить схему или начать опрыскивать логику полномочий всюду по Вашему приложению (напр. "Пользователи без 'создают' доступ, также не может выполнить метод xxx"),

Я думаю причина, решение не смотрит очень, DRY - то, что существует повторение:

  1. На названия отдела, и
  2. В возможностях отдела

Относительно № 1 имело бы смысл составлять таблицу отделов и давать каждому отделу идентификатор.

Относительно № 2 я соглашаюсь с первым комментарием. Можно, вероятно, кластеризировать различные контроллеры и действия в функциональные группы, и затем установить многих на многих отношения (таблица отображения) между пользователями и функциями. Функции затем имели бы связь "один ко многим" с тем, какие действия/контроллеры они позволяют. Это позволило бы Вам, с минимальным повторением, сказало бы, что вещи как "учет и продажи должны смочь прочитать все финансовые таблицы".

0
ответ дан 15 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: