gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:24:00 25 4
gpt4 key购买 nike

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

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

- 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com