C # детальные разрешения: несколько внутренних систем, сценарий интрасети - PullRequest
0 голосов
/ 27 июня 2010

У меня есть следующий сценарий:

  • Несколько пользователей (<100) </li>
  • Учетные записи пользователей в AD (в разных группах)
  • Каждая группа в AD соответствуетво внутренний отдел;в каждом отделе есть по крайней мере один руководитель
  • (можно сказать) У нас есть перекрестный контроль (существуют роли руководителя, применимые к группе групп, т. е. может быть один руководитель, который фактически контролирует три или для групп - каксуществует в AD)
  • Несколько внутренних систем, половина из них на веб-основе, все они построены на основе .Net framework

В настоящее время у нас имеется большинство настольных систем, аутентифицирующих пользователей с помощьюразрешения для папок (развертываются в сетевой среде с использованием ClickOnce, каждая папка развертывания разрешена отдельными пользователями).Это не работает для всех настольных систем, хотя;у нас есть два из них, использующих свою собственную встроенную систему аутентификации, как показано ниже:

  • Система A состоит в основном из различных таблиц данных (просто показывает некоторые данные на экране).

  • Все таблицы данных на самом деле представляют собой разные группы одинаковых данных;эти данные относятся к конкретной учетной записи.

  • Каждая строка счета содержит столбцы {число, владелец, тип, данные1, данные2, данные3, данные4 ...};различные группировки основаны на номере / владельце / типе.

  • Все столбцы данных (n) являются числами (сумма для каждой группировки отображается после завершения группировки)

Для этой конкретной системы столбцы данных относятся к группам.Таким образом, пользователи в AD Group1 могут видеть данные столбцов (1-5), Group2 может просматривать данные столбцов (7-9) и так далее.Однако супервизор для каждой группы может видеть один дополнительный столбец для своей группы (супервизор Group1 может видеть данные (1-5) и data6 - давайте назовем его «специальным столбцом» для группы);Есть супервизоры, которые могут видеть столбцы других групп (включая «специальный столбец» или нет), есть общие супервизоры, которые могут видеть все столбцы, и есть также пользователи, которые могут видеть все несвойственные столбцы.Это беспорядок.

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

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

Кроме того, большинству существующих веб-систем разрешены жесткие коды (if (sADLogin == "userA") {..});некоторые из них используют только неинтуитивные URL-адреса, отправленные конкретным пользователям, и пальцы скрещены.Sad.

Мы хотели бы использовать более абстрактный подход для разрешения (чтобы мы могли заставить каждую систему использовать один и тот же поставщик аутентификации).Использование веб-сервисов / WCF только кажется уместным (также учитывая, что мне все еще нужно аутентифицировать настольные системы и некоторые электронные таблицы, возможно, с использованием имен);однако я не мог найти подходящий образец или архитектурную модель для этого.В документации Microsoft есть один шаблон интрасети WCF , который решает большинство из них, за исключением того, что я не могу использовать свои группы Windows в качестве ролей.В Интернете есть шаблон (http://msdn.microsoft.com/en-us/library/ff650091.aspx),, однако, который, кажется, решает проблему ролей (с этим я сейчас и сталкиваюсь), но, поскольку я впервые имею дело с безопасностью WCF, я хотел бы иметь некоторыемнения экспертов по этому вопросу.

Есть идеи?

Спасибо,

1 Ответ

0 голосов
/ 28 июня 2010

Для веб-приложений это может быть просто решено с помощью единого входа в Active Directory с использованием встроенной модели провайдера ASP.NET (см .: http://msdn.microsoft.com/en-us/library/aa478948.aspx).. Вы можете использовать Active Directory для аутентификации и доменагруппы для авторизации. Существует несколько встроенных способов ограничения доступа к страницам (используя теги в web.config), доступа к определенным частям страницы (используя) и доступа к коду (используя User.IsInRole () или RolePermission.Атрибут) - все работает автоматически. Для Интернета это своего рода стандарт (Интернет или интрасеть).

Для приложений, не основанных на веб-технологиях, вы по-прежнему можете использовать функции той же модели провайдера.также может довольно легко найти членство в группах в Active Directory.

Если все, что вам нужно, это знать, в какие группы кто-то входит, это, вероятно, то, как вы должны это сделать. Если вместо этого у этой таблицы базы данных естьчто-то более сложное (например, авторизация делегирования), тогда да - вы можете бросить службу WCF перед ти все ваши приложения используют это.Однако в случае с ASP.NET я бы ВСЕ ЕГО использовал модель провайдера и просто написал свой собственный RoleProvider, чтобы я мог по-прежнему использовать все встроенные функции безопасности ASP.NET.Надеюсь, это поможет.

...