aarbac

来源:互联网 发布:山东职业学院网络 编辑:程序博客网 时间:2024/06/06 03:24

介绍

aarbac

背景

阿巴克挑战

现在技术解决方案非常庞大,每个技术问题至少有一个解决方案。典型的应用程序有以下几层:

  1. 安全层(认证和授权)
  2. 用户界面层
  3. 业务逻辑层
  4. 数据访问层
  5. 和一个RDBMS数据库

安全层通常只是执行认证和授权,并为了方便角色(权限和权利),开发人员实现了各种HasPermission(),IsInGroup()等类型的方法与许多ifs elses和交换机,各种sql查询和注入代码到这些层(2,3和4)。基本上要确保具有适当权限的用户正在执行适当的操作。用户应该看到他们应该在屏幕上看到什么,用户能够做他们被允许做的事情与数据。在最初的几个版本中,一切看起来都不错,但是当复杂的业务场景,例外被引入,更多ifs,交换机被引入到这些层中,代码质量下降,代码量增加,并且使生产支持和增强困难时,新团队成员的噩梦!

 

 


什么是阿巴克?

aarbac

aarbac 一个基于角色的自动访问控制  .NET框架,可以基于登录的用户角色自动覆盖所有的CRUD(创建,读取更新,删除)操作。它将与权限相关的代码分离成一个完整的新层,并让这些层(2,3和4)正常工作,而不用担心这个权限。此外,它还维护用户权利。

  1. 自动化 - 数据过滤器和权限被抽象为一个单独的层,并全部自动化。
  2. 基于模式 - 数据过滤器和权限基于您的数据库模式。
  3. 清洁代码 - 清洁代码,减少错误,减少测试,减少维护。
  4. 加密 - 角色,权利和用户参数被加密并以二进制形式存储在aarbac数据库中。
  5. 禁用重写特定的查询 - 我们明白,会有几个查询,其中aarbac可能无法产生所需的自动结果,在这种情况下,只需关闭阿巴克。
  6. 附带REST API,Utility,WinApp测试平台,示例代码。
  7. 可插拔。8。
  8. nuget部署。

1.自动数据过滤器和权限(基于模式)

在您的SELECT,INSERT,UPDATE和DELETE查询上应用行和列级权限。例如,读取(或选择)操作如下所示...

select * from Author

自动可能会被转换为...

SELECT Author.AuthorId, Author.Name, Author.ZipCodeId FROM Author inner join [ZipCode] [t9] on [t9].ZipCodeId = [Author].ZipCodeId inner join [City] [t10] on [t10].CityId = [t9].CityId WHERE t10.Name in ('New York','Charlotte')

...假设用户属于一个角色,只允许他从作者列表中只看到3列,只允许看到来自纽约和夏洛特城市的作者。和更新查询,如下所示...

update Author set Name = 'Eyedia', SSN = '999-99-9999' where AuthorId = 9999

可能会碰到例外

User ‘abc’ does have permission to update table ‘Author’ but does not have permission to update column ‘SSN’

使用代码

选择查询:

using (Rbac rbac = new Rbac("essie")) //<-- you should pass the logged in user name from the context {      using (RbacSqlQueryEngine engine = new RbacSqlQueryEngine(rbac, query))      {           engine.Execute(); //<-- automatically parse and transform query based on role           if ((!engine.IsErrored) && (engine.Parser.IsParsed)              && (engine.Parser.QueryType == RbacQueryTypes.Select))               return engine.Table; //<-- if it is select query, the table will be loaded      } } 

插入,更新和删除

using (Rbac rbac = new Rbac("essie"))   //<-- you should pass the logged in user name from the context{    using (SqlQueryParser parser = new SqlQueryParser(rbac))    {        parser.Parse(query); //<-- this will throw exception if not permitted                           //<-- if you are here, you are goood. Just perform basic insert/update/delete    }}

源代码和维基页面可在github上找到 -  https://github.com/eyedia/aarbac

2.权利(菜单/子菜单和屏幕/屏幕元素)

aarbac中的每个规则都具有屏幕权利,您可以在以下两个类别中为应用程序定义权利:

  1. 菜单 - (链接列表节点)中的菜单和子菜单
  2. 屏幕 - 屏幕和屏幕元素(链接列表节点)

只需在这些节点上设置可见和启用的属性即可。当用户登录时,即根据你的身份验证机制(例如组织的活动目录)进行身份验证和授权时,只需将用户映射到一个特定的aarbac角色,每个角色都将拥有权限。应用程序开发人员需要将权利xml应用于菜单和屏幕元素。

先决条件:

  1. Microsoft SQL Server
  2. .NET 4.5.2+

释放频率

截至今天,我正在释放每个星期天晚上的美国东部时间(没有承诺!请接受!)

源代码,文档和演示

  1. 源代码
  2. 演示
  3. 维基
  4. 的NuGet

如何视频

兴趣点

aarbac的主要骨干是TSQL解析器,您可以使用SQLQueryParser类解析任何TSQL查询,而解析器对象将包含各种信息,如引用的表名,模式,别名,列名,别名,各种具有详细信息的联接在连接(S)上。