【问题标题】:Using ROLES in jhipster?在 jhipster 中使用角色?
【发布时间】:2015-12-02 21:30:07
【问题描述】:

我尝试在 jhipster 中添加和更改角色。首先,我只是尝试将一个用例的角色从用户更改为管理员。然后我对其进行了测试,即使角色是 ROLE_ADMIN 用户也可以添加员工,所以它没有改变任何东西。

我还添加了新角色,称为 MANAGER。我编辑了 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');
                })
            }]
        })

【问题讨论】:

  • 我遇到了同样的问题。当使用不同的角色登录时,分配给状态的角色不会限制对页面的访问。

标签: spring-security jhipster user-roles


【解决方案1】:

编辑以下6个文件以包含/排除块中指定的代码以添加/删除角色(以ROLE_MANAGER为例)

  1. AuthoritiesConstants.java(java中使用的常量)

    public static final String MANAGER = "ROLE_MANAGER";

  2. src/main/resources/config/liquibase/authorities.csv(正确的 Liquidbase 更新)

    ROLE_MANAGER

  3. src/main/resources/config/liquibase/users.csv(添加用户名:manager,密码:user)

    5;manager;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;Manager;Manager;manager@localhost;true;en;system

  4. src/main/resources/config/liquibase/users_authorities.csv(另一个适当的 Liquidbase 更新)

    5;ROLE_MANAGER

  5. src/main/webapp/app/admin/user-management/user-management.controller.js(用于 JavaScript 中可用的角色)

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

  6. src/main/webapp/app/admin/user-management/user-management-dialog.controller.js(用于 JavaScript 中可用的角色)

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

一切就绪后重新启动服务器,并在应用程序启动后仔细检查 JHI_AUTHORITY 和 JHI_USER_AUTHORITY 表是否存在新的 ROLE_MANAGER。使用用户名“manager”和密码“user”登录系统。

【讨论】:

  • UnexpectedLiquibaseException:CSV 第 5 行只有 9 列,标题有 10。我更正如下。编辑 users.csv: 5;manager;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;Manager;Manager;manager@localhost;true;en;system;system
  • 我不得不删除数据库并重新运行服务器以使其工作。否则,liquidbase 抱怨校验和验证错误; Liquibase could not start correctly, your database is NOT ready: Validation Failed
  • src/main/webapp/app/admin/user-management/user-management.controller.js 不再可用
【解决方案2】:

您必须在 JHI_AUTHORITY 表中插入新角色,然后将此角色授予 JHI_USER_AUTHORITY 表中的某些用户。这意味着如果您重新创建数据库(例如,如果您使用 H2),则更新 authority.csv 和 users_authorities.csv 文件。

在客户端,只需将新角色添加到状态定义的角色属性即可。

【讨论】:

  • 但是如果我添加角色:['ROLE_ADMIN'],是否意味着ROLE_USER不能去employee.new?就我而言,它不是那样工作的,用户也可以添加一个新员工,所以现在缺少了什么?我正在使用 mySQL,并手动向 db 添加了新角色。
  • 角色是相互独立的,拥有 ROLE_ADMIN 的用户不一定拥有 ROLE_USER,您可以将这两个角色授予同一个用户。在您的状态下,您可以设置角色:['ROLE_ADMIN', 'ROLE_USER'] 如果您想授权具有这两个角色中的任何一个的用户访问此状态。
  • 我的意思是我有角色:['ROLE_ADMIN'],但角色 ROLE_USER 的用户仍然可以去添加新员工,这些角色在我的情况下不起作用。
  • 你确定你的 API 返回了正确的角色,你在浏览器的控制台中检查了吗?
  • roles: ["ROLE_USER"] 0: "ROLE_USER" 这是登录时的响应。
【解决方案3】:

我找到了一个最简单的方法:

  1. 通过更改以下内容从 .gradle 文件(在我的情况下为 App>gradle>profile_dev.gradle)禁用 liquibase:

    def 配置文件 = 'dev,no-liquibase' //if (project.hasProperty('no-liquibase')) { // 配置文件 += ',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. 最后在数据库“jhi_authority”表的“name”列添加“YOUR_ROLE”并保存。现在重新启动应用程序,您将能够使用新创建的角色创建用户。

【讨论】:

    【解决方案4】:

    从@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 不会获取在权限中所做的更改,步骤 2 中的 csv]

      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. 修改 UserService.java 中的公共用户 createUser(ManagedUserVM managedUserVM) 方法(非常重要)修改默认密码生成逻辑

    // 注释默认密码生成。就我而言,我设置了默认值 //用户与用户ID相同

    //字符串加密密码= passwordEncoder.encode(RandomUtil.generatePassword()); String encryptedPassword = passwordEncoder.encode(managedUserVM.getLogin());

    1. 以管理员身份登录应用程序
    2. 添加具有新角色的新用户。默认密码与用户名相同。

    【讨论】:

      【解决方案5】:

      经过上面的指导,我得到了:

      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

      【讨论】:

        【解决方案6】:

        在 JHipster 6 中,csv 文件被命名为authority.csv。因此,请按照之前帖子中的说明沿 AuthoritiesConstants.java 更改此文件。

        【讨论】:

          猜你喜欢
          • 2018-09-17
          • 2020-08-04
          • 1970-01-01
          • 2017-06-19
          • 2015-01-30
          • 1970-01-01
          • 1970-01-01
          • 2016-07-30
          • 1970-01-01
          相关资源
          最近更新 更多