Управление доступом к объектам и разрешениями с помощью 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) для достижения управления разрешениями?