Иерархическая группа Разрешения Теория / Ресурсы? - PullRequest
2 голосов
/ 16 сентября 2008

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

Немного фона: Я создаю систему учетных записей пользователей для веб-CMS, которая допускает иерархию вложенных групп. Каждой группе может быть разрешен / запрещен доступ для чтения, записи, добавления и удаления (либо явно для этой группы, либо неявно одним из ее родителей). Как будто это не было достаточно сложно, система также позволяет пользователям быть членами нескольких групп. - Это то, где я застрял. У меня все настроено, но я борюсь с реальной логикой для определения разрешений для данного пользователя.

Ответы [ 4 ]

3 голосов
/ 16 сентября 2008

Руководство по CakePHP имеет отличное описание того, как работают списки контроля доступа.

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

2 голосов
/ 19 января 2009

Представляет разрешения, установленные для данной группы, в виде битовой маски. ИЛИ объединение битовых масок даст вам результирующий набор разрешений.

Обновление для @Alex:

Я написал этот ответ 3 года назад, но я думаю, что имел в виду следующее ...

Из вопроса

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

Назначить битовую маску, соответствующую полному набору разрешений группы (или роли) в системе:

например. 00 (использование двух битов упрощает!)

Первый бит присваивает Permission A, а второй Permission B.

Теперь, скажем, группа А предоставляет следующий набор разрешений: 01.

... и скажем, что Группа B предоставляет следующий набор разрешений: 10.

Чтобы получить результирующий набор разрешений для пользователя в произвольном наборе групп, вы можете выполнить логический OR для битовых масок набора разрешений:

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

Я не знаю подробностей системы опрашивающего, но описанная здесь система может быть дополнена для достижения различных поведений группового состава с использованием разных логических операторов.

1 голос
/ 16 сентября 2008

Я уже делал это раньше, и его нетривиальная реализация. Вы захотите взглянуть на класс SecurityPermission.

[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

Я делал это раньше, используя XML (что я не уверен, что буду делать снова) и сохраняя этот XML в виде списка разрешений внутри SQL-сервера в столбце XML через хранимую процедуру CLR. XML будет иметь элемент, называемый «разрешением», и тогда разрешение фактически будет ENUM внутри кода. Каждое разрешение было новой реализацией класса SecurityPermission (ссылка выше). Пользователи были привязаны к группам, которые были определены на сервере SQL, а затем, когда пользователь был добавлен / удален в группы, документ XML обновлялся, чтобы отразить, какие группы они разделили. из.

Как только пользователь войдет в систему, учетные данные пользователей будут загружены в хранилище приложений (сеанс), а затем будут доступны соответственно. Когда требуется авторизация, XMl в хранилище приложений будет загружен в SecurityPermission с помощью метода «FromXML». На этом этапе я бы использовал следующие методы, чтобы определить, было ли у пользователя разрешение:

  • Спрос
  • Intersect
  • Union
  • IsUnrestricted
  • IsSubsetOf

и т. Д. И т. Д. И т. П.

В этот момент после выполнения требования я смог определить, имел ли вызывающий доступ доступ в соответствии с тем, как я реализовал свои процедуры безопасности в SecurityPermissions.

Опять же, это оставляет ТОННУЮ детализацию, но это должно заставить вас идти по правильному пути.

Взгляните и на это пространство имен: [2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx "System.Security.Permissions"

1 голос
/ 16 сентября 2008

Посмотрите на разрешения в Andrew File System . Это позволяет пользователям создавать и администрировать свои собственные группы, выборочно назначая права администратора и ACL. Вы можете обнаружить, что многие неприятные детали уже разработаны для вас в их модели.

Редактировать: вот лучшая ссылка на документацию AFS:

http://www.cs.cmu.edu/~help/afs/index.html

Вот раздел о группах:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

...