Проверка, есть ли у определенного пользователя роль

Все Вы неправы. Считайте вопрос. Ответ:

Использование Singleton, если:

  • у Вас должен быть один и только один объект типа в системе

, не используют Singleton если:

  • Вы хотите сохранить память
  • , Вы хотите попробовать что-то новое
  • , Вы хотите представить, сколько Вы знаете
  • , поскольку все остальные делают его (См. грузовой культовый программист в Википедии)
  • В виджетах пользовательского интерфейса
  • Это, как предполагается, кэш
  • В строках
  • На Сессиях
  • , я могу целый день идти

, Как создать лучший одиночный элемент:

  • , Чем меньший, тем лучше. Я - минималист
  • , Удостоверяются, что это ориентировано на многопотоковое исполнение
  • , Удостоверяются, что это никогда не не пустое
  • , Удостоверяются, что это создается только однажды
  • Ленивый или системная инициализация? До Ваших требований
  • Иногда ОС или JVM создают одиночные элементы для Вас (например, в Java каждое определение класса является одиночным элементом)
  • , Обеспечивают деструктор или так или иначе выясняют, как расположить ресурсы
  • Использование мало памяти

9
задан bezmax 2 December 2009 в 15:41
поделиться

2 ответа

Я полагаю, ваш класс домена User содержит ссылку hasMany на ваш класс Role, например:

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
}

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

9
ответ дан 4 December 2019 в 13:02
поделиться

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

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

. . .

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){
               //user is an admin
}
3
ответ дан 4 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: