Spring security 在jhipster中使用角色?

Spring security 在jhipster中使用角色?,spring-security,jhipster,user-roles,Spring Security,Jhipster,User Roles,我试图在jhipster中添加和更改角色。首先,我尝试将一个用例的角色从user改为admin。然后我测试了它,用户可以添加雇员,即使角色是ROLE_ADMIN,所以它没有改变任何东西 我还增加了一个新角色,叫经理。我编辑了AuthoritiesConstants.java,并将新角色添加到JHI_AUTHORITY-table中。我应该做些别的事情,还是这足以让它工作 state('employee.new', { parent: 'employee',

我试图在jhipster中添加和更改角色。首先,我尝试将一个用例的角色从user改为admin。然后我测试了它,用户可以添加雇员,即使角色是ROLE_ADMIN,所以它没有改变任何东西

我还增加了一个新角色,叫经理。我编辑了AuthoritiesConstants.java,并将新角色添加到JHI_AUTHORITY-table中。我应该做些别的事情,还是这足以让它工作

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');
                })
            }]
        })

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


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

编辑以下6个文件,以包括/排除在块中指定的代码,以添加/删除角色(例如role\u MANAGER)

  • AuthoritiesConstants.java(在java中使用的常量)

    公共静态最终字符串管理器=“角色\管理器”

  • src/main/resources/config/liquibase/authorities.csv(适当的液基更新)

    职位经理

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

    五,;经理$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/VFIEL7LWGOH/K;经理经理manager@localhost;是的;EN系统

  • src/main/resources/config/liquibase/users\u authorities.csv(另一个适当的liquidbase更新)

    五,;职位经理


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

    $scope.authorities=[“角色用户”、“角色管理员”、“角色经理”]


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

    $scope.authorities=[“角色用户”、“角色管理员”、“角色经理”]


  • 一切就绪后重新启动服务器,并在应用程序启动后再次检查JHI_权限和JHI_用户权限表,以确保新的角色管理器在其中。使用用户名:“经理”和密码“用户”登录系统。

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

  • 通过更改以下内容禁用.gradle文件中的liquibase(在我的示例中为App>gradle>profile_dev.gradle):

    def配置文件='开发,无液化' //if(project.hasProperty('no-liquibase')){ //配置文件+=',无液化' //}

  • 现在更改src/main/webapp/scripts/app/admin/user management/user-management.controller.js以添加您的角色

    $scope.authorities=[“角色用户”、“角色管理员”、“您的角色”]

  • 和src/main/webapp/scripts/app/admin/user management/user-management-dialog.controller.js

    $scope.authorities=[“角色用户”、“角色管理员”、“您的角色”]

  • 最后在数据库“jhi_authority”表的“name”列中添加“YOUR_ROLE”并保存。现在重新启动应用程序,您将能够使用新创建的角色创建用户


  • 经过上述指示,我得到:

    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
    
    完整说明:

    向@Constantin Zagorsky学习以下是有效的步骤

  • AuthoritiesConstants.java
    (在java中使用的常量)
  • 公共静态最终字符串管理器=“角色\管理器”

    2.
    src/main/resources/config/liquibase/authorities.csv
    (适当的liquibase更新)[这将不会运行。但与DB保持同步很重要

    职位经理

  • 更新数据库[重要原因是liquibase不会接受当局的变更,第2步为csv]

    在jhi_权限值中插入('ROLE_MANAGER')


  • src/main/webapp/app/admin/user management/user management.controller.js
    (角色在JavaScript中可用)

  • $scope.authorities=[“角色用户”、“角色管理员”、“角色经理”]


  • src/main/webapp/app/admin/user management/user management dialog.controller.js
    (角色在JavaScript中可用)
  • $scope.authorities=[“角色用户”、“角色管理员”、“角色经理”]

  • 在UserService.java中修改公共用户createUser(ManagedUserVM ManagedUserVM)方法(非常重要)修改默认密码生成逻辑
  • //注释默认密码生成。就我而言,我是默认的 //与userid相同的用户

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

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

  • 在JHipster 6中,csv文件名为
    authority.csv
    。因此,请按照前面文章中所述的
    AuthoritiesConstants.java
    更改此文件


    但如果我添加角色:['ROLE\u ADMIN'],这是否意味着ROLE\u用户不能转到employee.new?在我的例子中,它并没有以这种方式工作,用户也可以添加一个新员工,所以现在缺少了一些东西?我使用的是mySQL,我手动将新角色添加到db中。角色相互独立,拥有role_ADMIN的用户不必拥有role_user,这取决于您将两个角色授予同一用户。在您的状态中,如果您想授权具有这两个角色中的任何一个的用户访问此状态,您可以设置角色:['ROLE\u ADMIN','ROLE\u USER'],我的意思是我有角色:['ROLE\u ADMIN'],但仍然具有角色的用户可以去添加新员工,这些角色在我的情况下不起作用。您确定您的API返回了正确的角色吗,您是否已在浏览器控制台中进行了检查?角色:[“角色用户”]0:“角色用户”在登录时对此进行响应。我也遇到了同样的问题。分配给状态的角色不限制访问