Мне нужно отображать/скрывать кнопки действий в зависимости от того, может ли пользователь получить доступ (по определению роли) к конкретному контроллеру/действию. Я использую плагин Spring Security.
Моя цель - использовать аннотацию @Secured("ROLE_...") для каждого метода каждого из моих контроллеров, и я ищу способ проверить перед вызовом действия, есть ли у пользователя доступ к этому конкретному действию . Я предполагаю, что есть способ проверить это, потому что аннотация содержит информацию, но я не могу найти никакого решения.
В этом примере я пытаюсь найти метод HASACCESS:
Контроллер с аннотацией @Secured
class MyExampleController{
@Secured("ROLE_ADMIN")
def myMethod(){ do stuff.. }
}
HTML-код для включения ссылки
<role:link controller="myExample" action="myMethod">Action</role:link>
И моя роль tagLib
class RoleTagLib {
static namespace = "role"
def link = {attrs, body ->
User user = (User) springSecurityService.currentUser
if(HASACCESS(user, attrs.controller, attrs.action)){
out << g.link(attrs, body)
}
}
}
Я нашел в этот поток метод "hasAccess()" содержится в SecurityTagLib, но этот метод защищен, и даже когда я расширяю SecurityTagLib с помощью моего, вызов этого метода возвращает мне "Нет подписи метода...". Я думаю, что он использует interceptUrlMap, определенный в Config.groovy, а не аннотации.
РЕДАКТИРОВАТЬ: мне удалось расширить tagLib безопасности и использовать метод «hasAccess», но кажется, что он использует только interceptUrlMap, содержащийся в Config.groovy, и не заботится о аннотациях, которые я добавляю в свои контроллеры.