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?

questionAnswers(2)

yourAnswerToTheQuestion