Използване на ROLES в 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: CSV ред 5 има само 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
Трябваше да премахна базата данни и да стартирам отново сървъра, за да работи. Тъй като иначе liquidbase се оплакваше от грешка при проверка на контролната сума; 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. Това означава актуализиране на authorities.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'], ако искате да упълномощите потребител с някоя от тези 2 роли за достъп до това състояние. - 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
роли: [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

Като вземем лист от @Константин Загорски, ето стъпките, които работят.

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

публичен статичен финален низ MANAGER = "ROLE_MANAGER";

2.src/main/resources/config/liquibase/authorities.csv (правилна актуализация на liquibase) [Това няма да работи. Но е важно да поддържате синхрон с DB]

ROLE_MANAGER

  1. Актуализиране на DB [Важно, тъй като liquibase няма да вземе промените, направени в Authority,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. Променете публичния потребителски метод createUser(ManagedUserVM managedUserVM) в UserService.java (Много важно). Промяна на логиката за генериране на парола по подразбиране

// генериране на парола по подразбиране за коментар. В моя случай направих потребителя по подразбиране //потребител същият като userid

//Низ encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword()); String encryptedPassword = 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