c# - 使用 Entity Framework 管理实体访问和权限

标签 c# sql-server-2008 entity-framework permissions

在使用 Entity Framework 4.1 的 Web 应用程序中,我们使用 SQL Server 成员资格来管理用户访问。然而,我们需要实现一组更细粒度的角色和权限管理。

在数据库中我们已经创建了相关表:

- Roles 
- Permissions 
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role) 

使用一些核心实体上的属性,我们可以通过 EF 在语义上限制访问,例如,给定特定用户,他/她只能看到相关的已发货订单或固有数据。

现在我们想在其中注入(inject)权限,这意味着客户可以查看并创建订单,而公司(这是两个不同的角色)只能查看其产品的订单并打印报告。

这个想法是将属性也用于实体级别的权限,并在调用方法时检查当前用户是否拥有适当的权限。例如:

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 的一些内置功能)来实现权限管理?

最佳答案

Is there any pattern or best practice that we could follow

是的,它的名字是Aspect-Oriented ProgrammingPostSharp可能是完成这项工作的最佳工具(不幸的是它不是免费的)。

但是,如果您正在使用 MVC(您还没有提到任何此类内容),您可以派生您自己的 AuthorizeAttribute 版本查询您自己的权限表,您可以简单地用您想要允许的角色来装饰您的操作,例如

[Authorize(Roles="Customer, Company")]
public ActionResult ViewOrders(...)
{
    ...
}

[Authorize(Roles="Customer")]
public ActionResult CreateOrder(...)
{
    ...
}

关于c# - 使用 Entity Framework 管理实体访问和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033458/

相关文章:

c# - 添加结构 : Interface to a List<Interface>

mysql - 在mysql中添加外键

使用 FindByIdAsync 时取消 ASP.Net Core Identity

C# EF 5.0 向 MySQL 数据库添加百万条记录需要数小时

c# - 使用 Rhino Mocks 默认返回空列表

c# - 托管者通过其 IP 地址访问页面主机

sql - SQL Server 2008 中与其他列的排序树

sql - 如何在sql中对同类行进行分组

asp.net-mvc - 当我使用 asp.net mvc web api 读取 Oracle 表时出现严重错误(数据类型为 CLOB)

c# - 使用 LINQ 比较 C# 中的两个列表并将缺失项添加到实体类的最简单方法