2009-12-02 3 views
9

есть ли какой-то прекрасный способ проверить, имеет ли определенная конкретная роль определенный пользователь (а не тот, который входит в систему)?Проверка того, имеет ли конкретный пользователь роль

Вот 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 
... 
} 

Спасибо заранее.

+2

немного непонятно, что вы просите. вы ищете что-то «красивее», чем код выше? Предоставляет ли предоставленный вами фрагмент вам работу? –

+0

Эта строка была примером, чтобы точно показать, что мне нужно. Нет функции ifAnyGranted (пользователь, роли). – bezmax

ответ

9

Я полагаю, ваш класс домена Пользователь имеет 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 
} 

Обновленный ответ может можно найти here.

+1

Чтобы использовать эту технику, чтобы проверить, вошедшего в систему пользователя: Защиту authenticateService Защиту pricipalInfo = authenticateService.principal() Защиту пользователя = User.findByUsername (pricipalInfo.username) если (user.authorities.any {нем. авторитет == "ROLE_ADMIN"}) { // пользователь - администратор } –

3

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

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

. . . 

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){ 
       //user is an admin 
} 
+0

Просто заметил, что вопрос был конкретно не о вошедшем в систему пользователем. Надеюсь, это все равно полезно. –

+1

Я понимаю, что это старый ответ, но похоже, что AuthorizeTools был заменен SpringSecurityTools – David

4
if (grails.plugin.springsecurity.SpringSecurityUtils.ifAllGranted("ROLE_ADMIN")) 
{ 
    ... 
} 
0

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

+0

Разве это не так, как ответ Стефана? – bezmax

+0

@bezmax почти, присмотритесь, вызов User.get (1) не нужен, протестирован с Grails 2.4.4. – bitsnaps

+0

Ну, часть вопроса была «если какой-то конкретный пользователь (а не тот, который вошел в систему)». – bezmax

Смежные вопросы