Проверка, есть ли у определенного пользователя роль - PullRequest
9 голосов
/ 02 декабря 2009

Есть ли какой-нибудь симпатичный способ проверить, играет ли какой-то определенный пользователь (не тот, кто вошел в систему) какую-то определенную роль?

Вот пример Grails (обычно такой же для простой Java, но с синтаксисом):

def user = User.get(1) //Get user with id 1
if (ifAnyGranted(user,"ROLE_ADMIN")) { //This is the line I need to implement somehow
...
}

Заранее спасибо.

Ответы [ 4 ]

9 голосов
/ 02 декабря 2009

Я полагаю, ваш класс домена пользователя содержит ссылку hasMany на ваш класс роли следующим образом:

class User  {
    static hasMany = [authorities: Role]
    //....
}
class Role  {
    static belongsTo = User
    String description
    String authority
    //....
}

Итак, ваш код для проверки ролей прост:

User user = User.get(1)
if (user.authorities.any { it.authority == "ROLE_ADMIN" }) {
    // user is a admin
}

Обновленный ответ можно найти здесь .

4 голосов
/ 30 октября 2015
if (grails.plugin.springsecurity.SpringSecurityUtils.ifAllGranted("ROLE_ADMIN"))
{
   ...
}
3 голосов
/ 16 декабря 2009

Если вы используете плагин Spring Security и хотите проверить текущего вошедшего в систему пользователя:

import org.codehaus.groovy.grails.plugins.springsecurity.AuthorizeTools

. . .

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){
               //user is an admin
}
0 голосов
/ 30 июля 2017

В случае, если вы хотите проверить текущего вошедшего в систему пользователя, вам не нужно запрашивать домен пользователя, поскольку вы уже внедрили springSecurityService, так что вы могли бы просто написать:

def springSecurityService

def someAction(){
    if (principal.authorities.any { it.authority == 'ROLE_ADMIN'}){
        //...
    } else {
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...