Существующая мелкозернистая библиотека / структура контроля доступа? - PullRequest
3 голосов
/ 29 июля 2010

Допустим, у меня есть такие требования:

Пользователь A в роли AA должен иметь возможность обновлять все объекты типа A1.

Пользователь B в роли BB должен иметь возможность обновлять только объекты типа A1 с первичным идентификатором "2", который я назову A1 ("2"), и не может обновлять любые другие объекты типа A1, но может добавить или удалить любое количество дочерних объектов типа B2 к объекту A1 («2»).

Пользователь C в Role CC должен иметь возможность редактировать большинство, но не все свойства этих дочерних объектов B2, принадлежащих объекту A1 ("2"), а также члены Role CC не могут добавлять или удалять объекты B2 из A1 ( "2").

Пользователь D находится в Role BB и Role CC, и в результате комбинированного членства имеет разрешения, полученные из объединения двух наборов разрешений (в данном случае, поскольку разрешения Role CC являются надлежащим подмножеством роли BB, это означает, что пользователь D может делать все, что разрешено для роли BB).

И так далее. Эти политики могут быть изменены после развертывания, и поэтому не должны требовать значительных усилий по переработке для реализации изменений (например, что может потребоваться для декларативного подхода к решению этой проблемы).

Я бы предположил, что списки контроля доступа (ACL) будут храниться рядом или внутри защищаемых объектов.

Я предполагаю, что разработчик, пишущий код, должен иметь возможность императивно (не декларативно) запрашивать единственный метод / функцию / операцию / процедуру, с аргументами, идентифицирующими текущий принципал, рассматриваемый объект, рассматриваемую операцию (возможно) мы называем это привилегией), а затем получаем единственное логическое значение, указывающее, должна ли операция быть разрешена или запрещена.

Не стесняйтесь оспаривать мои предположения.

Теперь я уже имею в виду простое, но эффективное запатентованное общее решение (основанное на работе, которую я уже посвятил производству и работает довольно хорошо). Я рассматриваю возможность публикации этого проекта с открытым исходным кодом.

Но прежде чем перейти к следующему уровню и создать эту версию, я подумал, знает ли кто-нибудь о широко распространенной системе, модуле или библиотеке (не обязательно должен быть .NET), которая уже помогает разработчикам в реализации этот вид детального контроля над сущностями (будь то записи в базе данных или объекты в ORM или что-либо еще).

P.W. Просматривая ответы перед публикацией этого сообщения в SO, я нашел ответ в другом месте ( SO LINK ), в котором предполагалось, что Zend_Acl может иметь такую ​​возможность для проекта LAMP, но я бы предпочел решение .NET / Windows вместо этого.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Оказывается, что мне было нужно (и я не знаю, почему я этого раньше не видел), был Windows AzMan.Потребовалась небольшая работа, чтобы выяснить, как сделать что-то вроде наследуемого ACL, но с некоторым творческим использованием областей, у меня есть довольно управляемая, гибкая и быстрая система.документация оставляет желать лучшего.

0 голосов
/ 29 июля 2010

Rhino Security стоит посмотреть.Может изменить ваши предположения ...

...