管理与实体框架实体访问和权限(Manage entity access and permission

2019-08-01 19:03发布

在使用实体框架4.1的Web应用程序,我们使用SQL Server成员资格管理用户访问。 然而,我们需要实现更精细的设定角色的权限管理。

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

- 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的功能),实现权限管理的任何图案或最佳做法?

Answer 1:

是否有任何图案或最佳实践,我们可以遵循

是的,这就是所谓的面向方面编程和PostSharp可能是这个职位的最佳工具(遗憾的是它不是免费的)。

但是,如果你正在使用MVC(你有没有提及的任何这样),你可以得到自己的版本AuthorizeAttribute查询自己的权限表,你可以简单地跟你要允许例如角色装点你的行动

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

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


Answer 2:

你熟悉ASP.NET的默认成员资格提供 ?

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

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



文章来源: Manage entity access and permissions with Entity Framework