【发布时间】:2012-10-23 15:02:31
【问题描述】:
在使用 Entity Framework 4.1 的 Web 应用程序中,我们使用 SQL Server Membership 来管理用户访问。但是,我们需要实现一组更精细的角色权限管理。
在数据库中我们已经创建了相关表:
- Roles
- Permissions
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role)
使用某些核心实体上的属性,我们通过 EF 在语义上限制访问,例如,给定特定用户,她/他只能看到相关的发货订单或固有数据。
现在我们想在其中注入权限,这意味着例如 customer 可以查看和创建订单,而 company(这是两个不同的角色)只能查看其产品的订单并打印报告。
这个想法是在实体级别也使用属性来获取权限,并在调用方法时检查当前用户是否拥有适当的权限。例如:
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 作为前端,并且在那里我们已经实现了角色和权限访问。我们需要对后端部分(包含数据层)进行相同的处理。这是两个通过 Web 服务进行通信的独立服务器。通过在后端实施权限管理将加强对数据访问的控制。
我们是否可以遵循任何模式或最佳实践(最终使用 EF 的一些内置功能)来实现权限管理?
【问题讨论】:
-
你在使用repositories吗?
-
是的,我们使用通过泛型允许获取每个特定实体的存储库的存储库。
标签: c# sql-server-2008 entity-framework permissions