介绍
背景
现在技术解决方案非常庞大,每个技术问题至少有一个解决方案。典型的应用程序有以下几层:
- 安全层(认证和授权)
- 用户界面层
- 业务逻辑层
- 数据访问层
- 和一个RDBMS数据库
安全层通常只是执行认证和授权,并为了方便角色(权限和权利),开发人员实现了各种HasPermission(),IsInGroup()等类型的方法与许多ifs elses和交换机,各种sql查询和注入代码到这些层(2,3和4)。基本上要确保具有适当权限的用户正在执行适当的操作。用户应该看到他们应该在屏幕上看到什么,用户能够做他们被允许做的事情与数据。在最初的几个版本中,一切看起来都不错,但是当复杂的业务场景,例外被引入,更多ifs,交换机被引入到这些层中,代码质量下降,代码量增加,并且使生产支持和增强困难时,新团队成员的噩梦!
什么是阿巴克?
aarbac 是一个基于角色的自动访问控制 .NET框架,可以基于登录的用户角色自动覆盖所有的CRUD(创建,读取更新,删除)操作。它将与权限相关的代码分离成一个完整的新层,并让这些层(2,3和4)正常工作,而不用担心这个权限。此外,它还维护用户权利。
- 自动化 - 数据过滤器和权限被抽象为一个单独的层,并全部自动化。
- 基于模式 - 数据过滤器和权限基于您的数据库模式。
- 清洁代码 - 清洁代码,减少错误,减少测试,减少维护。
- 加密 - 角色,权利和用户参数被加密并以二进制形式存储在aarbac数据库中。
- 禁用重写特定的查询 - 我们明白,会有几个查询,其中aarbac可能无法产生所需的自动结果,在这种情况下,只需关闭阿巴克。
- 附带REST API,Utility,WinApp测试平台,示例代码。
- 可插拔。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中的每个规则都具有屏幕权利,您可以在以下两个类别中为应用程序定义权利:
- 菜单 - (链接列表节点)中的菜单和子菜单
- 屏幕 - 屏幕和屏幕元素(链接列表节点)
只需在这些节点上设置可见和启用的属性即可。当用户登录时,即根据你的身份验证机制(例如组织的活动目录)进行身份验证和授权时,只需将用户映射到一个特定的aarbac角色,每个角色都将拥有权限。应用程序开发人员需要将权利xml应用于菜单和屏幕元素。
先决条件:
- Microsoft SQL Server
- .NET 4.5.2+
释放频率
截至今天,我正在释放每个星期天晚上的美国东部时间(没有承诺!请接受!)
源代码,文档和演示
如何视频
兴趣点
aarbac的主要骨干是TSQL解析器,您可以使用SQLQueryParser类解析任何TSQL查询,而解析器对象将包含各种信息,如引用的表名,模式,别名,列名,别名,各种具有详细信息的联接在连接(S)上。