Управление доступом к объектам и разрешениями с помощью Entity Framework

В веб-приложении, использующем Entity Framework 4.1, мы используем членство в SQL Server для управления доступом пользователей. Однако нам нужно реализовать более детальный набор ролей управления разрешениями.

В базе данных мы уже создали относительные таблицы:

- Roles 
- Permissions 
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role) 

Используя атрибуты на некоторых основных объектах, мы семантически ограничиваем доступ с помощью EF, например, для конкретного пользователя он / она может видеть только относительные отгруженные заказы или собственные данные.

Теперь мы хотели бы ввести разрешения в нем, имея в виду, например, чтопокупатель можно видеть и создавать заказы, аКомпания (это две разные роли) может видеть только заказы на свои продукты, а также печатать отчеты.

Идея состоит в том, чтобы использовать атрибуты также для разрешений на уровне сущности и проверять, владеет ли текущий пользователь надлежащими правами при вызове метода. Например:

public void BeforeAdd()
{
   // Get required permissions for the specific entity (Order as example)

   //Check that current user has permission of creating a new Order 
}

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

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

Есть ли какой-либо шаблон или передовой опыт, которому мы могли бы следовать (в конечном итоге используя некоторые встроенные функции EF) для достижения управления разрешениями?

Ответы на вопрос(2)

Ваш ответ на вопрос