Как интегрировать контроль доступа с моим ORM в приложении .net windows form? - PullRequest
6 голосов
/ 04 марта 2010

Я занимаюсь разработкой общих инструментов для запросов к базам данных .Net 3.5 Windows Form.Для того, чтобы сделать уровень представления независимым от уровня базы данных.Я использую среду ORM, XPO от DevExpress.

Но у меня нет встроенной функции контроля доступа. Я просматривал Интернет и обнаружил в службах данных WCF, есть интересная концепция, Interceptor, которая следует AOP(Аспектно-ориентированное программирование).

Мне интересно, у кого есть такой опыт для построения контроля доступа в ORM.Мое основное требование:

  1. Это должен быть общий метод, контролируемый пользователями во время выполнения.Поэтому любое жесткое кодирование неприемлемо.
  2. Оно может быть основано на атрибуте, таблице базы данных или даже внешней сборке.

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

Любые предложения приветствуются.

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Я не уверен, что этот ответ будет полезен в вашей ситуации, но он может быть интересным для вас.

Компания X-tensive (разработчик DataObjects.Net ORM ) планирует реализовать аналогичную функцию для DataObjects.Net через несколько месяцев. План X-tensive состоит в том, чтобы предоставить полнофункциональное готовое к использованию расширение безопасности, возможно, на основе атрибутов и аспектов. Конечно, это будет тесно связано с этим ORM, но вы можете извлечь некоторые идеи из его описания. См. Запрос функции и ее обсуждение здесь .

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

0 голосов
/ 06 мая 2010

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

Презентация -> Менеджеры -> Уровень доступа к данным -> БД

Пример:

var user = Program.Components.Get<IUserManager>().GetById(1);
user.FirstName = "Jonas";
Program.Components.Get<IUserManager>().Save(user);

В менеджерах вы можете использовать IIdentity и IPrincipal (встроенные интерфейсы управления доступом в .Net) для управления доступом.http://msdn.microsoft.com/en-us/library/ms172765(VS.80).aspx

...