2015-06-22 2 views
0

У меня есть служба RESTful, которая использует внутреннюю бизнес-службу для сохранения и извлечения информации из баз данных. Webservice uri выглядит примерно так: /api/entity/{id}, к которому приложение веб-пользовательского интерфейса запрашивает с ID объекта. Здесь проблема заключается в том, что {id} может быть буквально чьим-либо идентификатором, то есть записью другого пользователя, который не должен видеть пользователь с помощью приложения. Для того, чтобы решить эту проблему, используя Spring Security, я написал SPEL, что-то вроде,Защита объекта домена с помощью Spring ACL 3

@Service 
interface EntityService { 
    @PostAuthorize("returnObject.userId==principal.id") 
    public ReturnObject get(long i); 
} 

ли вышеописанный подход правильный способ решить эту проблему? (В моих предыдущих проектах мои разработчики использовали для написания всех этих продуктов безопасности в своих бизнес-методах.) Поскольку сложность безопасности растет для сущности, скажем, администратор пользователя (который создал запись) может видеть объект, но не другие администраторы или администраторы групп могут видеть запись и т. д., этот подход тоже усложняется. Кроме того, после того, как я выкопал себе голову во многие классы библиотеки Spring-ACL, мне каким-то образом удалось настроить Spring-ACL, вызвать его оценщика разрешений, оценить метод hasPermission в SPEL с авторизацией объекта и его уникальным идентификатором загружен из базы данных.

@Service 
interface EntityService { 
    @PreAuthorize("hasPermission(#id, 'com.project.domain.ReturnObject', 'read')") 
    public ReturnObject get(long id); 
} 

Но проблема, которую я вижу при таком подходе есть, каждый раз, когда пользователь создает запись не приложение создать разрешения ACL слишком (ACL_ ENTRY) для этого объекта? Правильно ли это подходит к этой проблеме, или есть какой-то другой способ, который я не видел? Я знаю, что это не новая проблема, и кто-то там должен был решить ее уже во многих отношениях. Я хочу знать, как проблема была решена не традиционным способом в логике обслуживания или запросах, а с использованием таких фреймворков, как Spring-ACL или Apache Shiro.

+1

Spring Security не относится к созданию acl_entry для вас, к сожалению. Вы должны сами сделать эту часть. –

ответ

1

Я не могу ответить, если Широ использует другой подход, но, как Нил прокомментировал ранее,

Spring Security не предусматривает каких-либо специальных интеграции автоматически создавать, обновлять и удалять списки контроля доступа, как часть вашего DAO или операции репозитория. Вместо этого вам нужно будет написать код [...] для отдельного домена объекты

Spring Security Reference: Domain Object-based ACLs

с открытым кодом OACC security framework(раскрытие: Я сопровождающий и соавтор), с другой стороны, имеет концепцию create-permissions, которая позволяет точно определить, какие разрешения пользователь получит на объект после его создания.

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

+1

Это новая новость, я искал некоторые фреймворки для оценки и сравнения с Spring-ACL, посмотрю на это и оценим с помощью моего требования и обновит результаты здесь. Спасибо! –

+0

@VijayVeeraraghavan Итак, каково было ваше заключение? –

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

  • Нет связанных вопросов^_^