Yar*_*nko 6 asp.net authorization access-control entity-framework-6 abac
我正在为不断发展的系统开发REST API.一般来说,角色/声明访问控制工作完全像这样.
[HttpGet]
[Route("settings")]
[Authorization(Type = AuthorizationType.Admin, Permission = Permission.StoreSettings)]
public IHttpActionResult GetSettings() { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
当我有用户可以更深入地控制访问时,就会出现问题,如下图所示.这是系统的抽象示例.
如果我需要在其中一个区域查询某些内容,那很简单,但是当我需要从中获取所有内容时Items,Departments我必须编写相同的丑陋代码,我无法重复使用.不是真正的代码,但看起来像这样.
Db.Items.Where(i =>
i.Stores.Any(s => s.CityId == User.CityId) &&
Db.UserDepartmentRights.Any(udr => udr.UserId == User.UserId && i.DepartmentId == udr.DepartmentId));
Run Code Online (Sandbox Code Playgroud)
它显然是丑陋的,很难维护,特别是如果我需要为系统带来另一个级别.
是否有任何框架可以处理这个或我可以实现的正式架构?
Dav*_*ard 15
就在这里.有一个名为ABAC的模型 - 或基于属性的访问控制(abac)就是这样做的.
ABAC是RBAC(基于角色的访问控制)的演变.您使用的基于声明的模型是RBAC的一种形式,您可以在其中为用户分配角色和权限.RBAC在小型,简单的部署中运行良好,但在需要扩展或建立关系时往往会失败.在您的情况下,您希望根据用户和商店之间的关系来表达访问控制.
ABAC和RBAC都是由NIST(国家科学技术研究所)定义的模型.
在ABAC中,您将获得两种类型的构造:
使用ABAC,您可以拥有任意数量的策略,以满足许多不同的方案.
ABAC推荐的架构如下:
今天实现ABAC的主要标准是XACML,即可扩展访问控制标记语言(xacml).它是一种技术中立的细粒度访问控制方法.今天有几种XACML实现:
你可以在网上找到一些好的资源
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |