Я разрабатываю общую базу данных инструментальные средства формирования запросов, приложение.Net 3.5 Windows Form. Для создания уровня представления, независимо от слоя базы данных. Я использую платформу ORM, XPO от DevExpress.
Но, у меня нет встроенной функции управления доступом. Я переместился по Интернету, и я нашел в Услугах передачи данных WCF, существует интересное понятие, Перехватчик, который следует за AOP (Аспектно-ориентированное программирование).
Я задаюсь вопросом, у кого есть такой опыт создать управление доступом в ORM. Мое основное требование:
Я готов купить готовое решение. Согласно идее AOP, функция управления доступом может быть интегрирована с существующими функциями легко и почти не сознательно предыдущему разработчику;)
Любые предложения приветствуются.
Я не уверен, что этот ответ будет полезен в вашей ситуации, но он может быть интересен для вас.
Компания X-tensive (разработчик DataObjects.Net ORM) планирует реализовать подобную возможность для DataObjects.Net через несколько месяцев. X-tensive планирует предоставить полнофункциональное готовое к использованию расширение безопасности, возможно, основанное на атрибутах и аспектах. Конечно, оно будет тесно связано с этим ORM, но вы можете почерпнуть некоторые идеи из его описания. См. запрос функции и его обсуждение здесь.
Вы также можете взглянуть на Rhino Security, я не знаю текущего статуса этого проекта, но похоже, что такое решение может быть полезным в вашем случае.
Почему бы не создать слой между 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