Используете РОЛИ в jhipster?

Пробовал добавлять и менять роли в jhipster. Сначала я просто попытался изменить роль одного варианта использования на администратора с пользователя. Затем я проверил это, и пользователь может добавить сотрудника, даже если роли ROLE_ADMIN, поэтому ничего не изменилось.

Я также добавил новую роль под названием МЕНЕДЖЕР. Я отредактировал AuthoritiesConstants.java и добавил новую роль в таблицу JHI_AUTHORITY. Должен ли я сделать что-то еще или этого достаточно, чтобы заставить это работать?

state('employee.new', {
            parent: 'employee',
            url: '/new',
            data: {
                roles: ['ROLE_ADMIN'],
            },
            onEnter: ['$stateParams', '$state', '$modal', function($stateParams, $state, $modal) {
                $modal.open({
                    templateUrl: 'scripts/app/entities/employee/employee-dialog.html',
                    controller: 'EmployeeDialogController',
                    size: 'lg',
                    resolve: {
                        entity: function () {
                            return {nameFirst: null, nameLast: null, taxNumber: null, isFinnish: null, finnishSOTU: null, valtticard: null, birthDate: null, isContactPerson: null, isTiedonantaja: null, cOTARKENNE: null, id: null};
                        }
                    }
                }).result.then(function(result) {
                    $state.go('employee', null, { reload: true });
                }, function() {
                    $state.go('employee');
                })
            }]
        })

person Sami    schedule 07.09.2015    source источник
comment
У меня такая же проблема. Роль, назначенная для состояния, не ограничивает доступ к странице при входе в систему с другой ролью.   -  person Pedro Madrid    schedule 22.10.2015


Ответы (6)


Отредактируйте следующие 6 файлов, чтобы включить/исключить код, указанный в блоках, для добавления/удаления роли (например, ROLE_MANAGER)

  1. #P2# <блочная цитата> #P3#
  2. #P4# <блочная цитата> #P5#
  3. #P6# <блочная цитата> #P7#
  4. #P8# <блочная цитата> #P9#
  5. #P10# <блочная цитата> #P11#
  6. #P12# <блочная цитата> #P13#

Перезапустите сервер, как только все будет на месте, и дважды проверьте таблицы JHI_AUTHORITY и JHI_USER_AUTHORITY после запуска приложения на наличие новой ROLE_MANAGER. Войдите в систему под логином: «manager» и паролем: «user».

person Constantin Zagorsky    schedule 20.01.2016
comment
UnexpectedLiquibaseException: в строке 5 CSV всего 9 столбцов, в заголовке — 10. Я исправил следующим образом. Отредактировано users.csv: 5;manager;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;Manager;Manager;manager@localhost;true;en;system;system - person Andrei Krasutski; 29.09.2016
comment
Мне пришлось удалить базу данных и перезапустить сервер, чтобы он заработал. В противном случае ликвидная база жаловалась на ошибку проверки контрольной суммы; Liquibase could not start correctly, your database is NOT ready: Validation Failed - person khawarizmi; 11.11.2016
comment
src/main/webapp/app/admin/user-management/user-management.controller.js больше не доступен - person netshark1000; 14.05.2017

Вы должны вставить новую роль в таблицу JHI_AUTHORITY, а затем предоставить эту роль некоторым пользователям в таблице JHI_USER_AUTHORITY. Это означает обновление файлов author.csv и users_authorities.csv при повторном создании базы данных (например, если вы используете H2).

На стороне клиента просто добавьте новую роль в свойство roles ваших определений состояния.

person Gaël Marziou    schedule 08.09.2015
comment
Но если я добавлю роли: ['ROLE_ADMIN'], значит ли это, что ROLE_USER не может перейти к employee.new? В моем случае это не сработало, Пользователь также мог добавить нового сотрудника, так что теперь чего-то не хватает? Я использую mySQL и вручную добавил новую роль в db. - person Sami; 08.09.2015
comment
Роли не зависят друг от друга, пользователь с ROLE_ADMIN не обязательно должен иметь ROLE_USER, вы можете предоставить обе роли одному и тому же пользователю. В вашем состоянии вы можете установить роли: ['ROLE_ADMIN', 'ROLE_USER'], если вы хотите авторизовать пользователя с любой из этих двух ролей для доступа к этому состоянию. - person Gaël Marziou; 08.09.2015
comment
Я имею в виду, что у меня есть роли: ['ROLE_ADMIN'], но все же пользователь с ролью ROLE_USER мог зайти и добавить новых сотрудников, в моем случае роли не работают. - person Sami; 09.09.2015
comment
Вы уверены, что ваш API возвращает правильные роли, вы проверили в консоли браузера? - person Gaël Marziou; 09.09.2015
comment
roles: [ROLE_USER] 0: ROLE_USER Это в ответ при входе в систему. - person Sami; 09.09.2015

Я нашел самый простой способ:

  1. Отключите liquibase из файла .gradle (в моем случае App> gradle> profile_dev.gradle), изменив следующее:

    def profiles = 'dev,no-liquibase' //if (project.hasProperty('no-liquibase')) { // profiles += ',no-liquibase' //}

  2. Теперь измените src/main/webapp/scripts/app/admin/user-management/user-management.controller.js, чтобы добавить свою роль.

    $scope.authorities = ["ROLE_USER", "ROLE_ADMIN", "YOUR_ROLE"];

  3. И src/main/webapp/scripts/app/admin/user-management/user-management-dialog.controller.js

    $scope.authorities = ["ROLE_USER", "ROLE_ADMIN", "YOUR_ROLE"];

  4. Наконец, добавьте «YOUR_ROLE» в столбец «name» таблицы «jhi_authority» в базе данных и сохраните. Теперь перезапустите приложение, и вы сможете создать пользователя с новой созданной ролью.

person Sakib    schedule 27.10.2016

Взяв листок из @Constantin Zagorsky, вот шаги, которые работают.

  1. AuthoritiesConstants.java (константа для использования в java)

public static final String MANAGER = "ROLE_MANAGER";

2.src/main/resources/config/liquibase/authorities.csv (правильное обновление liquibase) [Это не запустится. Но важно синхронизироваться с БД]

ROLE_MANAGER

  1. Обновите БД [Важно, потому что liquibase не подхватит изменения, внесенные в правах доступа, csv на шаге 2]

    insert into jhi_authority values ('ROLE_MANAGER');

  2. src/main/webapp/app/admin/user-management/user-management.controller.js(чтобы роль была доступна в JavaScript)

$scope.authorities = ["ROLE_USER", "ROLE_ADMIN", "ROLE_MANAGER"];

  1. src/main/webapp/app/admin/user-management/user-management-dialog.controller.js(чтобы роль была доступна в JavaScript)

$scope.authorities = ["ROLE_USER", "ROLE_ADMIN", "ROLE_MANAGER"];

  1. Измените общедоступный метод User createUser(ManagedUserVM manageUserVM) в UserService.java (очень важно). Изменить логику генерации паролей по умолчанию

// генерация пароля по умолчанию для комментариев. В моем случае я сделал //пользователя по умолчанию таким же, как идентификатор пользователя

//Строка зашифрованного пароля = passwordEncoder.encode(RandomUtil.generatePassword()); Строка зашифрованного пароля = passwordEncoder.encode(managedUserVM.getLogin());

  1. Войдите в приложение как администратор
  2. Добавьте нового пользователя с новой ролью. Пароль по умолчанию будет таким же, как имя пользователя.
person Abhijit Mazumder    schedule 14.12.2016

После приведенной выше инструкции я получил:

ERROR [...]f.config.liquibase.AsyncSpringLiquibase  : Liquibase could not start correctly, your database is NOT ready: Validation Failed:
[...]

Чтобы этого избежать, запустите

./mvnw liquibase:clearCheckSums

Пользователь с новой ролью не имеет доступа к настройкам учетной записи, поэтому вам необходимо добавить новые роли в

/src/main/webapp/app/account/password/password.state.js
/src/main/webapp/app/account/sessions/sessions.state.js
/src/main/webapp/app/account/settings/settings.state.js

Полная инструкция: https://codefitter2.blogspot.com/2016/11/how-to-create-new-role-in-jhipster.html

person Nico    schedule 29.11.2016

В JHipster 6 файл csv называется authority.csv. Так что меняйте этот файл по AuthoritiesConstants.java как описано в предыдущих постах.

введите здесь описание изображения

person Nicolas Zozol    schedule 20.06.2019