【问题标题】:Setting up new default Roles in jhipster在 jhipster 中设置新的默认角色
【发布时间】:2017-06-19 16:08:30
【问题描述】:

如何在 jhipster 中设置默认角色? (使用 angularjs 和弹簧)。

我自己解释一下

在注册页面我想为注册用户指定角色。比如说一个复选框或一个列表。 (例如人类和动物)

如何在角度控制器和弹簧中做到这一点?

我现在能做什么?

我在数据库和角度添加了我需要的角色,我可以为新注册的用户指定角色,只能通过管理员的用户管理页面。

【问题讨论】:

    标签: spring-security jhipster


    【解决方案1】:

    为了实现这一点,还有一些工作要做,所以我将用一些小样本粘贴正确的部分..

    一般而言,您必须扩展 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 中询问

    【讨论】:

    • 非常感谢大卫!我已经找到了一种方法,并且效果很好,我不知道这是否是最佳的最佳实践方式。我会尽快发布。
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多