Rest APi Регистрация пользователя - PullRequest
0 голосов
/ 12 мая 2018

Я создаю API Grails REST

Я использую Spring Security

Для создания классов домена User и Role

grails s2-quickstart com.mycompany.myapp User Role

Мой REST API должен поддерживать возможность создания пользователей, но я не знаю, как это сделать

@GrailsCompileStatic
@EqualsAndHashCode(includes='username')
@ToString(includes='username', includeNames=true, includePackage=false)
class User implements Serializable {
    private static final long serialVersionUID = 1

    String username
    String password
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    User(String username, String password) {
        this()
        this.username = username
        this.password = password
    }

    Set<Role> getAuthorities() {
        (UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
    }

    static constraints = {
        password nullable: false, blank: false, password: true
        username nullable: false, blank: false, unique: true
    }

    static mapping = {
        table '`user`'
        password column: '`password`'
    }
}

Я создал контроллер

class UserController extends RestfulController {
    static responseFormats = ['json', 'xml']
    UserController() {
        super(User)
    }

    @Secured(['permitAll'])
    @Override
    def save() {
        super.save()
    }
}

И на данный момент я могу создавать пользователей, но не могу автоматически назначать им роли

Как мне назначить ему роль ROLE_USER при создании нового пользователя?

Я использую Grails 3.3.5

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Spring Security Core делегирует ответственность за управление отношениями между пользователем и ролью через сущность UserRole с помощью ряда статических методов, среди которых create, я поделюсь с вами определением

static UserRole create(User user, Role role, boolean flush = false) {
    def instance = new UserRole(user: user, role: role)
    instance.save(flush: flush)
    instance
}

Как видите, этот статический метод ожидает два параметра: экземпляр пользователя и экземпляр роли и, при необходимости, сброс. Вы используете этот метод следующим образом

Role adminRole = new Role(authority: 'ROLE_ADMIN').save() // here makes sense the recommendation of styl3r to first search if the role exists if it is not like that to create it

User testUser = new User(username: 'me', password: 'password').save()

UserRole.create testUser, adminRole

Я взял этот пример из документации к плагину. По следующей ссылке.

https://grails -plugins.github.io / Grails-весна-безопасности ядро ​​/ 3.2.x / index.html # учебники

0 голосов
/ 14 мая 2018

Вы можете сделать что-то вроде этого:

User user = new User(username: params.username, password: params.password).save()
Role role = Role.findOrSaveWhere(authority: "ROLE_USER")
new UserRole(user: user, role: role).save()

// If you want to assign another role to the user
role = Role.findOrSaveWhere(authority: "ROLE_SUBSCRIBED")
new UserRole(user: user, role: role).save()

Если ваш проект является исключительно API REST, я бы порекомендовал использовать профиль rest-api Grails. Есть хороший учебник по этому вопросу, вы можете проверить его здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...