Мог кто-то объяснять безопасность Spring BasePermission. Создать?

Я работаю над проектом, который включает безопасность Spring ACL, и я столкнулся с создать разрешением BasePermission.CREATE. Кто-то объяснил бы, как это, как предполагается, работает или что это позволяет кому-то делать?

Это - мое понимание, что каждый объект имеет acl, и каждый acl имеет многих туз, и каждый туз имеет sid и разрешение. Как можно дать разрешение на объекте создать его, если это должно быть создано для присоединения acl к нему?

8
задан Matthew Sowders 29 April 2010 в 00:03
поделиться

2 ответа

Безопасность Spring предоставляет разрешения для объектов домена косвенно через интерфейс ObjectIdentity .

Как вы упомянули, в большинстве случаев вы сначала создаете или получаете объект домена, а затем конструируете ObjectIdentityImpl для объекта домена:

MyDomainObject secured = new MyDomainObject();
ObjectIdentity securedIdentity = new ObjectIdentityImpl(secured);

Затем вы используете ObjectIdentity для получения ACL с помощью инфраструктуры безопасности Spring.

Однако это не единственный способ использовать идентификацию объекта. Вы можете передать ссылку на objectIdentity, которая не является фактическим бизнес-объектом, но имеет некоторые средства его идентификации, если он был создан.

Например, представьте, что мы хотим защитить файлы. Мы могли бы создать ObjectItentity с защищаемым экземпляром java.io.File . Объект File , который находится в идентификаторе, является только ссылкой на файл - это не фактический файл - файл может даже не существовать, но у нас есть ObjectIdentity, который мы можем затем рассуждать о безопасности и получать списки управления доступом. для.

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

PS: позвольте мне признаться, что я никогда не использовал Spring Security, но шаблон проектирования кажется мне довольно ясным после просмотра примера .

РЕДАКТИРОВАТЬ: Я обновил это, чтобы, надеюсь, прояснить - нет необходимости создавать реализации ObjectIdentity, как я писал изначально.

8
ответ дан 5 December 2019 в 20:14
поделиться

В более широком смысле существует два типа разрешений: класс и экземпляр. Создание объекта - это разрешение класса - у вас есть разрешение на создание нового экземпляра. Это бессмысленно, когда вы пытаетесь применить его к отдельному экземпляру. Разрешение на чтение может быть любым. У вас может быть разрешение на чтение всех экземпляров, или, может быть, у вас есть разрешение только на чтение нескольких явно перечисленных экземпляров.

Если вы когда-нибудь запутались, подумайте о классической проблеме «письмо-сюрприз на день рождения». Это служебное электронное письмо, отправленное всем, КРОМЕ именинника, чтобы спланировать вечеринку-сюрприз. В этом случае вам нужно разрешение класса CREATE для создания и отправки сообщения электронной почты, и у всех есть разрешение класса READ для чтения сообщения. Однако у одного человека есть разрешение DENY READ на экземпляр, чтобы он один не мог прочитать сообщение.

0
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

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