Чтение вслух всех действий в Контроллере Grails

Я должен считать все доступные действия от любого контроллера в моем веб-приложении. Причиной этого является система авторизации, где я должен дать пользователям список позволенных действий.

Например: у Пользователя xyz есть авторизация для выполнения шоу действий, списка, поиска. У пользовательского администратора есть авторизация для выполнения редактирования действий, удалите и т.д.

Я должен считать все действия от контроллера. У кого-либо есть идея?

6
задан ROMANIA_engineer 1 December 2017 в 11:51
поделиться

1 ответ

Это создаст список карт (переменная 'data') с информацией о контроллере. Каждый элемент списка представляет собой Map с ключами 'controller', соответствующим URL-имени контроллера (например, BookController -> 'book'), controllerName, соответствующим имени класса ('BookController'), и 'actions', соответствующим списку имен действий для этого контроллера:

import org.springframework.beans.BeanWrapper
import org.springframework.beans.PropertyAccessorFactory

def data = []
for (controller in grailsApplication.controllerClasses) {
    def controllerInfo = [:]
    controllerInfo.controller = controller.logicalPropertyName
    controllerInfo.controllerName = controller.fullName
    List actions = []
    BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(controller.newInstance())
    for (pd in beanWrapper.propertyDescriptors) {
        String closureClassName = controller.getPropertyOrStaticPropertyOrFieldValue(pd.name, Closure)?.class?.name
        if (closureClassName) actions << pd.name
    }
    controllerInfo.actions = actions.sort()
    data << controllerInfo
}
9
ответ дан 8 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

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