Роли пользователей в приложениях GWT - PullRequest
2 голосов
/ 03 марта 2011

Мне интересно, не могли бы вы предложить мне какой-нибудь способ реализации «ролей пользователя» в приложениях GWT.Я хотел бы реализовать приложение GWT, где пользователи входят в систему и назначаются «роли».Исходя из их роли, они смогут видеть и использовать различные области приложения.

Вот два возможных решения, которые я подумал:

1) Возможное решение может состоять в том, чтобы сделать вызов RPC длясервер во время onModuleLoad.Этот вызов RPC сгенерирует необходимые виджеты и / или поместит их на панель, а затем вернет эту панель клиентской стороне.

2) Другим возможным решением может быть вызов RPC при получении входа в систему от пользователей сервера.ролей и осмотр их, чтобы увидеть, что пользователь может сделать.

О чем вы думаете?

Большое спасибо заранее за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

Другой способ - разместить ваше приложение GWT на странице JSP. Ваш JSP может содержать фрагмент кода, подобный этому

<script type="text/javascript">
var role = unescape("${role}");
</script>

Где $ {role} - это язык выражений, расширенный от значения, которое вы вычислили из связанного сервлета / контроллера и представленного в JSP.

Когда ваше приложение GWT запускается в браузере, значение будет заполнено. Ваше приложение GWT может легко вызвать JS, чтобы получить это значение из вызова нативного метода, например

public native String getRole() { /*-{ return $wnd.role; }-*/;

Таким образом, ваш модуль может вызывать getRole (), проверять значение и делать то, что ему нравится, чтобы скрывать / показывать элементы.

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

2 голосов
/ 03 марта 2011

У меня работает следующий сценарий:

  1. Приложение GWT находится за ограничением безопасности.
  2. При загрузке модуля я выполняю вызов RPC для получения ролей из контейнера. Я храню их в классе основного модуля GWT как статическое поле, чтобы другие классы могли легко его использовать.
  3. Каждый виджет (особенно меню) может использовать роли (например, вызывать Main.getRoles ()) и конструировать себя в соответствии с ролями. Я не передаю роли в конструкторе. Каждый виджет знает, как вести себя в зависимости от роли.

Если важно не только скрывать, но и обеспечивать их выполнение, вы можете использовать безопасность контейнера и проверять роли и права при вызове бизнес-методов.

При использовании GIN вы также можете создать синглтон-класс для хранения ролей, полученных при входе в систему, и внедрять их везде, где вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...