2

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

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

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

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

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

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

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

4

2 回答 2

3

有没有我们可以遵循的模式或最佳实践

是的,它被称为面向方面的编程,而PostSharp可能是这项工作的最佳工具(不幸的是它不是免费的)。

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

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

[Authorize(Roles="Customer")]
public ActionResult CreateOrder(...)
{
    ...
}
于 2012-10-23T15:05:50.860 回答
0

您熟悉ASP.NET 的默认成员资格提供程序吗?

这是如何建立会员制度的典型例子。如果您不熟悉它,这可能是一个很好的学习例子。

您可能还会发现这个 SO 问题很有帮助。

于 2012-10-23T15:07:51.437 回答