2013-05-29 1 views
2

Я пытаюсь использовать примечания безопасности springs, такие как @PreAuthorize и @Secured, но я хочу оценить пользователя не на роли, но имеют ли они разрешения для определенного объекта в этом случае фирмы , В моем контроллере я получаю http-запрос, содержащий firmId в качестве параметра, и я хочу убедиться, что этот пользователь получил разрешение на эту фирму. Возможно ли это с помощью текущих весенних аннотаций безопасности ?. Я ищу элегантное решение, я смотрел на специализированные валидаторы ограничений как часть спецификации jsr303. Заголовок метода ниже.Использование пользовательских комментариев безопасности безопасности

public ModelAndView getSessionsJson(HttpServletRequest request, 
    HttpServletResponse response) throws ServletRequestBindingException {} 

ответ

2

Я думаю, что вы можете сделать что-то вроде этого:

public ModelAndView getSessionsJson(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException { 
    Integer firmId = getFirmId(request); 
    Firm firm = getFirmById(firmId); 
    doSomeBusinessLogic(firm); 
    ..... 
} 

@PreAuthorize("hasPermission(#firm, 'admin')") 
public void doSomeBusinessLogic(Firm firm) { 
    .... 
} 

.... 

использованием pre and post annotations в связке с ACL module. Конечно, прежде чем вам нужно настроить ACL DB schema и подготовить разрешения ACL для каждого фирменного объекта.

+0

Мне нравится идея использования списков контроля доступа, просто любопытно, есть ли в этом выгоды от производительности? потому что id представляет, что таблица входа может стать очень большой с таким количеством пользователей. – john

+0

Из официальной документации: «одна из основных возможностей модуля ACL Spring Security обеспечивает высокопроизводительный способ получения списков ACL». Единственный способ убедиться, что ACL достаточно быстро для вас, это заполнить данные и проверить время ответа. –