Administre el acceso y los permisos de la entidad con Entity Framework
En una aplicación web que utiliza Entity Framework 4.1, usamos la membresía de SQL Server para administrar el acceso de los usuarios. Sin embargo, necesitamos implementar un conjunto de roles más granular y una administración de permisos.
En la base de datos ya hemos creado las tablas relativas:
- Roles
- Permissions
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role)
Al usar atributos en algunas de las entidades centrales, restringimos el acceso semánticamente con EF, por ejemplo, dado un usuario específico, él / ella puede ver solo las órdenes enviadas relativas o datos inherentes.
Ahora nos gustaría inyectar los permisos en él, es decir, como ejemplo, que uncliente Puede ver y crear pedidos, mientras que unempresa (estos son dos roles diferentes) solo podían ver los pedidos de sus productos y también imprimir informes.
La idea sería utilizar atributos también para permisos a nivel de entidad y verificar si el usuario actual posee los derechos adecuados cuando se invoca un método. Por ejemplo:
public void BeforeAdd()
{
// Get required permissions for the specific entity (Order as example)
//Check that current user has permission of creating a new Order
}
Cada entidad llamaría a un método de este tipo, lo que permitiría centralizar el control sobre los permisos a nivel de la entidad.
Usamos MVC como frontend y allí ya hemos implementado roles y permisos de acceso. Necesitamos hacer lo mismo con la parte de fondo (que contiene la capa de datos). Estos son dos servidores separados que se comunican a través de servicios web. Al implementar la gestión de permisos en la parte de fondo, se fortalecería el control sobre el acceso a los datos.
¿Hay algún patrón o práctica recomendada que podamos seguir (eventualmente utilizando algunas funciones integradas de EF) para lograr la administración de permisos?