Автор оригинала: Michael Pratt.
1. Обзор
JHipster поставляется с двумя ролями по умолчанию – ПОЛЬЗОВАТЕЛЬ и АДМИНИСТРАТОР, но иногда нам нужно добавить свои собственные.
В этом руководстве мы создадим новую роль с именем МЕНЕДЖЕР, которую можно использовать для предоставления дополнительных привилегий пользователю.
Обратите внимание, что JHipster использует термин authorities несколько взаимозаменяемо с ролями . В любом случае, по сути, мы имеем в виду одно и то же.
2. Изменения кода
Первым шагом для создания новой роли является обновление класса AuthoritiesConstants . Этот файл автоматически генерируется при создании нового приложения JHipster и содержит константы для всех ролей и полномочий в приложении.
Чтобы создать нашу новую роль МЕНЕДЖЕРА, мы просто добавляем новую константу в этот файл:
public static final String MANAGER = "ROLE_MANAGER";
3. Изменения схемы
Следующий шаг – определить новую роль в нашем хранилище данных.
Hipster поддерживает множество постоянных хранилищ данных и создает начальную задачу настройки, которая заполняет хранилище данных пользователями и органами власти.
Чтобы добавить новую роль в настройку базы данных, мы должны отредактировать InitialSetupMigration.java файл . В нем уже есть метод под названием add Authorities , и мы просто добавим вашу новую роль в существующий код:
public void addAuthorities(MongoTemplate mongoTemplate) { // Add these lines after the existing, auto-generated code Authority managerAuthority = new Authority(); managerAuthority.setName(AuthoritiesConstants.MANAGER); mongoTemplate.save(managerAuthority); }
В этом примере используется MongoDB, но шаги очень похожи на другие постоянные хранилища, поддерживаемые JHipster.
Обратите внимание, что некоторые хранилища данных, такие как H2, полагаются исключительно на файл с именем authorities.csv, и, следовательно, не имеют сгенерированного кода, требующего обновления.
4. Использование Нашей Новой Роли
Теперь, когда у нас определена новая роль, давайте посмотрим, как ее использовать в нашем коде.
4.1. Java-код
На серверной части есть два основных способа проверить, имеет ли пользователь полномочия на выполнение операции.
Во-первых, мы можем изменить Конфигурацию безопасности , если хотим ограничить доступ к определенному API:
public void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.MANAGER); }
Во-вторых, мы можем использовать SecurityUtils в любом месте нашего приложения , чтобы проверить, находится ли пользователь в роли:
if (SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.MANAGER)) { // perform some logic that is applicable to manager role }
4.2. Интерфейс
Hipster предоставляет два способа проверки ролей на интерфейсе. Обратите внимание, что в этих примерах используются угловые, но аналогичные конструкции существуют и для React.
Во-первых, любой элемент в шаблоне может использовать *jhi Имеет любые полномочия директиву . Он принимает одну строку или массив строк:
Во-вторых, | Принципал класс может проверить , имеет ли пользователь определенную роль:
isManager() { return this.principal.identity() .then(account => this.principal.hasAnyAuthority(['ROLE_MANAGER'])); }
5. Заключение
В этой статье мы увидели, как просто создать новые роли и полномочия в JHipster. Хотя роли пользователя и администратора по умолчанию являются отличной отправной точкой для большинства приложений, дополнительные роли обеспечивают большую гибкость.
Благодаря дополнительным ролям у нас есть больший контроль над тем, какие пользователи могут получать доступ к API и какие данные они могут видеть в интерфейсе.
Как всегда, код доступен на GitHub .