【发布时间】:2017-06-19 16:08:30
【问题描述】:
如何在 jhipster 中设置默认角色? (使用 angularjs 和弹簧)。
我自己解释一下
在注册页面我想为注册用户指定角色。比如说一个复选框或一个列表。 (例如人类和动物)
如何在角度控制器和弹簧中做到这一点?
我现在能做什么?
我在数据库和角度添加了我需要的角色,我可以为新注册的用户指定角色,只能通过管理员的用户管理页面。
【问题讨论】:
如何在 jhipster 中设置默认角色? (使用 angularjs 和弹簧)。
我自己解释一下
在注册页面我想为注册用户指定角色。比如说一个复选框或一个列表。 (例如人类和动物)
如何在角度控制器和弹簧中做到这一点?
我现在能做什么?
我在数据库和角度添加了我需要的角色,我可以为新注册的用户指定角色,只能通过管理员的用户管理页面。
【问题讨论】:
为了实现这一点,还有一些工作要做,所以我将用一些小样本粘贴正确的部分..
一般而言,您必须扩展 API 以了解角色选择,因此可以明确提供此信息。然后根据需要更改 angularJS 前端。
通过将ManagedUserVM 发布到/api/account/register 来进行注册,所以第一件事是告诉AccountResource.registerAccount(...) 将一组字符串(您的角色)作为附加参数传递给userService.createUser
@Timed
public ResponseEntity registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) {
HttpHeaders textPlainHeaders = new HttpHeaders();
///...
User user = userService
.createUser(managedUserVM.getLogin(),
managedUserVM.getPassword(),
managedUserVM.getFirstName(),
managedUserVM.getLastName(),
managedUserVM.getEmail().toLowerCase(),
managedUserVM.getImageUrl(),
managedUserVM.getLangKey(),
//add authorities here
managedUserVM.getAuthorities()
);
mailService.sendActivationEmail(user);
//...
}
然后在UserService.createUser 中,通过将Set<String> authorities 添加到其参数和
if (authorities != null) {
Set<Authority> authorities = new HashSet<>();
authorities.forEach(
authority -> authorities.add(authorityRepository.findOne(authority))
);
user.setAuthorities(authorities);
}
这应该足以将权限传递给/api/register/ 并保存它们。您应该知道用户禁止使用 ADMIN 角色注册自己,但安全考虑取决于您,而不是我的答案。
知道您的 API 现在也可以处理权限,您可以通过它们。
您只需添加一些带有ng-model="vm.registerAccount.authorities" 到src/main/webapp/app/account/register/register.html 的复选框或选择框(如果是angularJS1)或
[(ngModel)]="registerAccount.authorities" tosrc/main/webapp/app/account/register/register.component.html`(如果是angular2)。
AFAIK 这应该会自动导致角度服务将这些权限/角色传递给 API。
希望我的简短回答能帮助您找到合适的地方!如果您卡住了,请随时在 cmets 中询问
【讨论】: