TabLayoutPanel — Показывать вкладки на основе ролей

#user-interface #gwt #roles #uibinder

#пользовательский интерфейс #gwt #роли #uibinder

Вопрос:

Я разрабатываю GWT-приложение, в котором навигация в основном представляет собой TabLayoutPane, где каждая вкладка представляет разные функциональные возможности. Что мне нужно, так это показывать только вкладки, которые пользователю разрешено видеть (у каждого пользователя есть роль, например, user или admin).

Проблема в том, что я не знаю, как этого добиться, особенно с UiBinder.

Вот что я подумал о:

  1. Не используйте UiBinder и не создавайте TabLayoutPanel программно.
  2. Используйте UiBinder и просто скрывайте определенные вкладки на основе каждой роли пользователя (что звучит так, как будто это было бы довольно неэффективно).

Или есть лучшие способы добиться чего-то подобного?

Ответ №1:

Я бы выбрал подход номер один, поскольку он намного чище, имхо. Однако убедитесь, что вы не используете это в качестве функции безопасности и не показываете какую-либо конфиденциальную информацию, которую не разрешено просматривать администраторам. Поскольку все построение будет происходить на javascript в браузере, будет довольно просто обмануть браузер, заставив показывать вкладки администратора без соответствующей авторизации.

Ответ №2:

Я предлагаю вариант 2.

GWT использует меньший объем JavaScript, поскольку вкладки в UiBinder можно преобразовать в HTML и CSS. Чтобы скрыть вкладку и ее содержимое:

     aTabPanel.getTabWidget(0).setVisible(false);
    aTabPanel.getTabWidget(0).getParent().setVisible(false);
  

Не очень приятный фрагмент кода, но вторая строка гарантирует, что сама вкладка скрыта в дополнение к содержимому вкладки.