2008-09-16 9 views
2

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

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

ответ

1

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

Edit: здесь лучше ссылку на АФС документации:

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

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

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

1

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

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

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

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

  • Спрос
  • Intersect
  • Союза
  • IsUnrestricted
  • IsSubsetOf

и т.д., и т.д. , и т.д.

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

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

Посмотрите на это пространство имен, а также: [2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx «System.Security.Permissions»

+0

Привет @Donn это выглядит действительно интересно, звучит как отличный пост в блоге. Я заметил, что вы опубликовали это несколько лет назад, из вашего опыта есть ли что-нибудь, что вы сейчас подойдете? – 2012-03-29 10:47:18

2

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

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

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

От вопроса

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

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

например, 00 (используя два бита, это просто!)

Первый бит содержит Permission A и второй Permission B.

Теперь скажите, что группа A предоставляет следующий набор разрешений: 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

Привет @Ben, это выглядит интересно, не могли бы вы рассказать об этом, возможно, с мини-примером? Или, может быть, ссылка на полезный ресурс? – 2012-03-29 10:58:53

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

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