Gerenciar o acesso e as permissões da entidade com o Entity Framework
Em um aplicativo da Web usando o Entity Framework 4.1, usamos a associação do SQL Server para gerenciar o acesso do usuário. No entanto, precisamos implementar um conjunto mais granular de funções, um gerenciamento de permissão.
No banco de dados, nós já criamos as tabelas relativas:
- Roles
- Permissions
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role)
Usando atributos em algumas das entidades centrais, restringimos o acesso semanticamente à EF, por exemplo, dado um usuário específico, ele pode ver apenas os pedidos enviados ou dados inerentes.
Agora gostaríamos de injetar as permissões nele, ou seja, como exemplocliente pode ver e criar pedidos, enquanto umempresa (estas são duas funções diferentes) só podiam ver pedidos para seus produtos e também imprimir relatórios.
A ideia seria usar atributos também para permissões no nível da entidade e verificar se o usuário atual possui direitos adequados quando um método é invocado. Por exemplo:
public void BeforeAdd()
{
// Get required permissions for the specific entity (Order as example)
//Check that current user has permission of creating a new Order
}
Tal método seria chamado por cada entidade, permitindo centralizar o controle sobre as permissões no nível da entidade.
Usamos o MVC como frontend e lá já implementamos o acesso a funções e permissões. Precisamos fazer o mesmo com a parte de back-end (contendo a camada de dados). Estes são dois servidores separados que se comunicam através de serviços da web. Ao implementar o gerenciamento de permissão no back end, a parte fortaleceria o controle sobre o acesso aos dados.
Existe algum padrão ou melhor prática que poderíamos seguir (eventualmente usando alguns recursos integrados da EF) para obter o gerenciamento de permissões?