我尝试在jhipster中添加和更改角色。首先,我只是尝试将一个用例的角色从用户更改为admin。然后我测试了它,即使角色是ROLE_ADMIN,用户也可以添加员工,所以它没有改变任何东西。
我还添加了一个名为MANAGER的新角色。我编辑了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');
})
}]
})
答案 0 :(得分:13)
编辑以下6个文件以包含/排除块中指定的代码以添加/删除角色(以ROLE_MANAGER为例)
AuthoritiesConstants.java(在java中使用的常量)
public static final String MANAGER =“ROLE_MANAGER”;
src / main / resources / config / liquibase / authorities.csv(适当的液体基础更新)
ROLE_MANAGER
src / main / resources / config / liquibase / users.csv(添加用户名:manager with password:user)
5;管理器; $ 2A $ 10 $ VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g / vfiEl7lwWgOH / K;管理;管理;管理器@本地;真;恩;系统
src / main / resources / config / liquibase / users_authorities.csv(另一个适当的液体基础更新)
5; ROLE_MANAGER
src / main / webapp / app / admin / user-management / user-management.controller.js(角色可在JavaScript中使用)
$ scope.authorities = [“ROLE_USER”,“ROLE_ADMIN”,“ROLE_MANAGER”];
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'。
答案 1 :(得分:1)
您必须将新角色插入JHI_AUTHORITY表,然后将此角色授予JHI_USER_AUTHORITY表中的某些用户。这意味着如果您重新创建数据库,则更新authorities.csv和users_authorities.csv文件(例如,如果您使用H2)。
在客户端,只需将新角色添加到州定义的角色属性中。
答案 2 :(得分:1)
我找到了一种最简单的方法:
通过更改以下内容,从.gradle文件(在我的情况下为App> gradle> profile_dev.gradle)中禁用liquibase:
def profiles ='dev,no-liquibase' // if(project.hasProperty('no-liquibase')){ // profiles + =',no-liquibase' //}
现在更改src / main / webapp / scripts / app / admin / user-management / user-management.controller.js以添加您的角色。
$ scope.authorities = [“ROLE_USER”,“ROLE_ADMIN”,“YOUR_ROLE”];
src / main / webapp / scripts / app / admin / user-management / user-management-dialog.controller.js
$ scope.authorities = [“ROLE_USER”,“ROLE_ADMIN”,“YOUR_ROLE”];
最后在数据库中的“jhi_authority”表的“name”列中添加“YOUR_ROLE”并保存。现在重新启动应用程序,您将能够使用新创建的角色创建用户。
答案 3 :(得分:0)
经过上述指示,我得到了:
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
答案 4 :(得分:0)
从@Constantin Zagorsky那里拿出一片叶子是有效的步骤。
AuthoritiesConstants.java
(在java中使用的常量)public static final String MANAGER =" ROLE_MANAGER";
2. src/main/resources/config/liquibase/authorities.csv
(正确的liquibase更新)[这不会运行。但与DB保持同步非常重要]
ROLE_MANAGER
更新数据库 [重要,因为liquibase不会获取权限中的更改,步骤2中的csv]
insert into jhi_authority values ('ROLE_MANAGER');
src/main/webapp/app/admin/user-management/user-management.controller.js
(用于在JavaScript中提供的角色)
$ scope.authorities = [" ROLE_USER"," ROLE_ADMIN"," ROLE_MANAGER"];
src/main/webapp/app/admin/user-management/user-management-dialog.controller.js
(用于在JavaScript中提供的角色)$ scope.authorities = [" ROLE_USER"," ROLE_ADMIN"," ROLE_MANAGER"];
//注释默认密码生成。在我的情况下,我做了默认 //用户与userid相同
// String encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword()); String encryptedPassword = passwordEncoder.encode(managedUserVM.getLogin());
答案 5 :(得分:0)