Уровень абстракции списка управления доступом (ACL) в .net

Доступен ли уровень абстракции ACL в .net? Я видел некоторые документы с "лучшими практиками", но не нашел хорошей базовой реализации. Как насчет System.Security.AccessControl? Это хорошая отправная точка?

ACL должны работать с ролями, хранящимися в БД, а также с ролями системы и для определений объектов в памяти, а также объектов или файлов БД. Поэтому он должен быть универсальным и/или легко расширяемым.

Должно ли это полагаться на IPrincipal, IIdentity из .net framework?

У Zend есть что-то похожее в их Framework для PHP, и я ищу такие вещи для C # вместо того, чтобы портировать это (если уже есть стандартное решение или реализация передовой практики).

@ладислав:

Он не предназначен для использования только в веб-сервисах, толстых клиентах или автономных приложениях. Из-за этого я ищу уровень абстракции, который можно расширить с помощью адаптеров для определенного бэкэнда/платформы. Вы правы, я ищу что-то вроде уровня абстракции управления доступом на основе ролей для различных типов объектов и правильных определений. Это не должно зависеть от ACL, которые вы установили для папок в файловых системах. Файловая система должна быть специальным адаптером, используемым реализацией ACL. Для меня сам ACL является концепцией и не имеет ничего общего с файловыми системами. Файловые системы ИСПОЛЬЗУЮТ реализацию концепции ACL (даже если она наиболее известна в этой области). Жесткая зависимость от Win32-api нежелательна. Вот почему я прошу что-то общее и абстрактное (интерфейс), которое обычно (и широко) используется. Знаете ли вы реализацию в среде Zend (я знаю, что это PHP, но эта концепция работает для любого приложения, а не только для веб-приложений)? Он абстрагирован и может использоваться для любого объекта в коде.


person Beachwalker    schedule 28.07.2011    source источник
comment
Какие у вас проблемы с System.Security.AccessControl?   -  person David Heffernan    schedule 28.07.2011
comment
Я видел AccessRule‹T›, но не нашел полезного примера кода. Я думаю, что в msdn отсутствуют некоторые примеры в этой области. nacl.codeplex.com кажется решением, но я не знаю, широко ли оно используется или нет .   -  person Beachwalker    schedule 28.07.2011
comment
... возможно, поле использования получает доступ к определенной части пользовательского интерфейса независимо от прав на данные. Отправной точкой будет простой строковый пользователь/роль/objectToAccess. Это может быть расширено на более поздних этапах с растущими потребностями/требованиями пользователей (например, для использования хранилища с поддержкой базы данных или пользователя Windows). Я не хочу жесткой зависимости от файлов/папок или Active Directory. (Я знаю, я мог бы использовать отдельную папку для обозначения объектов и творить магию на fs, но я не думаю, что это хорошая идея.)   -  person Beachwalker    schedule 29.07.2011
comment
Вы должны четко описать в своем вопросе, что вы хотите сделать и какой тип приложения вы создаете. Имейте в виду, что .NET предназначен не только для создания веб-приложений, поэтому не все функции, доступные в .NET, связаны с тем, что вы ожидаете. Упомянутое вами пространство имен тесно связано с Windows - я ожидаю, что это оболочка Win32 API для управления списками ACL в Windows. То, что вы ищете, вероятно, называется безопасностью на основе ролей, а в случае поставщика членства в веб-приложении и поставщика ролей.   -  person Ladislav Mrnka    schedule 29.07.2011
comment
@ladislav: Это полностью связано или только реализации по умолчанию? Я не согласен с вашим утверждением. Есть несколько примеров для IPrincipal и IIdentity в библиотеке всех образцов кода Microsoft на codeplex. Но вы правы, если говорите, что большинство реализованных (предоставленных) классов тесно связаны с конкретными полями (например, fs или web).   -  person Beachwalker    schedule 29.07.2011
comment
IPrincipal и IIdentity — это два основных интерфейса для выполнения любой аутентификации/авторизации в .NET. Объедините их с PrincipalPermission + PrincipalPermissionAttribute, и вы можете построить все, что захотите, но, возможно, есть готовые решения (я не знаю их, кроме тех, о которых я уже упоминал).   -  person Ladislav Mrnka    schedule 29.07.2011
comment
@ladislav: Спасибо за информацию. Было бы неплохо, если бы .net содержал простую независимую от типа (использующую объект или универсальный тип) базовую реализацию.   -  person Beachwalker    schedule 01.08.2011


Ответы (1)


Примером абстракции является библиотека nAcl — список управления доступом .NET.

... помогает вам легко обрабатывать сценарии для матрицы прав. Его также можно легко расширить через провайдера...

Функции:

  • Управляет правами приложения для вас
  • Обрабатывает иерархию прав
  • Права рассчитываются в одном месте, но потенциально могут быть получены откуда угодно благодаря механизму провайдера (похоже, это актуальная функция для добавления нескольких источников)
  • В провайдере памяти для статических прав
  • Поставщик маршрутизатора для обработки маршрутов и связывания поставщиков с маршрутом
  • Поставщик Sql для обработки прав в БД

... но я не видел использования IPrincipal в интерфейсе.

person Beachwalker    schedule 26.07.2012