OpenAuth.net

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心。最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示(文章结尾处给出在线演示链接)。相比刚开始时的版本,现在整个架构已经稳定,系统功能性,代码可读性维护性都有质的飞跃。

本文主要介绍系统结构及未来一段时间的开发计划。

项目简介

本项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发的一套符合国情的基于用户和角色的RBAC系统,系统的产生原因及与众不同的地方可以参考:领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net,这里就不过多介绍。项目地址:

https://git.oschina.net/yubaolee/OpenAuth.Net

演示地址在文章结尾处给出:)

当前项目功能:

  1. 模块权限  实现模块的自定义及权限分配;
  2. 菜单权限 实现菜单的自定义及权限分配;
  3. 资源权限  实现资源的自定义及权限分配,主要是为了给第三方应用提供服务;
  4. 实现用户分配角色,也可以直接给用户分配模块/菜单;
  5. 基于ASP.NET Identity登录;
  6. 实现一个简单的进出库管理的例子,在例子中使用admin,test登录或直接以“开发者账号”登录,看到的结果是不同的;

项目这一年里都发生了什么?

准确的说应该是5个月来发生了什么,因为项目正式发布刚刚5个多月的时间。最高兴的应该是入选了:开源中国2015 年度新增开源软件排名 TOP 100  在新入选的5977个项目中位列第69。也算为C#那可怜的开源份额做点贡献了!

系统架构

首先到底什么是经典DDD架构?

DDD:领域驱动设计,以领域业务为核心的设计。什么?这是屁话,很多书上都介绍过?

那我就从代码的角度来解释就是:丫就是你的XXXBLL模块不要引用诸如XXXDAL/XXXHELPER等模块并且能够实现系统的业务逻辑,基本就是了。如下图:

基于上面的结构创建本项目。所有的依赖关系在界面OpenAuth.Mvc项目中由AutoFac进行IOC控制,如下图:

OpenAuth.Domain 系统领域层,当前领域层主要有下面三部分组成:

  • 领域对象:系统核心对象;
  • 领域接口:当前主要是数据库访问的仓储接口,具体的实现在OpenAuth.Repository中实现;
  • 领域服务:系统的多对象交互业务处理。由于当前的业务复杂度比较低,业务主要是以领域服务的形式出现。如项目中的“进出库管理服务”:
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. using OpenAuth.Domain.Interface;
  5. namespace OpenAuth.Domain.Service
  6. {
  7. /// <summary>
  8. /// 领域服务
  9. /// <para>进出库管理服务</para>
  10. /// </summary>
  11. public class StockManagerService
  12. {
  13. private IStockRepository _repository;
  14. private IOrgRepository _orgRepository;
  15. private AuthoriseService _authoriseService;
  16. public StockManagerService(IStockRepository repository,
  17. IOrgRepository orgRepository, AuthoriseService service)
  18. {
  19. _repository = repository;
  20. _orgRepository = orgRepository;
  21. _authoriseService = service;
  22. }
  23. /// <summary>
  24. /// 根据部门ID得到进出库信息
  25. /// </summary>
  26. public dynamic Load(string username, int orgId, int pageindex, int pagesize)
  27. {
  28. _authoriseService.GetUserAccessed(username);
  29. if (_authoriseService.Orgs.Count == 0) //用户没有任何可见机构
  30. {
  31. return new
  32. {
  33. total = 0,
  34. pageCurrent = pageindex
  35. };
  36. }
  37. var orgIds = _authoriseService.Orgs.Select(u => u.Id).ToArray();  //用户可访问的机构ID
  38. var orgs = _orgRepository.GetSubWithOwn(orgId)   //点击的节点与用户可访问的机构合并
  39. .Where(u => orgIds.Contains(u.Id))
  40. .Select(u => u.Id).ToArray();
  41. var keys = _authoriseService.Resources.Select(r => r.Key);    //用户可访问的资源的KEY列表
  42. //由于库存Stock表开始没有设计资源有关的字段,暂时用User字段代替
  43. Expression<Func<Stock, bool>> exp = u => orgs.Contains(u.OrgId) && (u.User == "" || keys.Contains(u.User));
  44. var stocks = _repository.Find(pageindex, pagesize, "", exp);
  45. int total = _repository.GetCount(exp);
  46. return new
  47. {
  48. total = total,
  49. list = stocks,
  50. pageCurrent = pageindex
  51. };
  52. }
  53. public Stock Find(int id)
  54. {
  55. var stock = _repository.FindSingle(u => u.Id == id);
  56. if (stock == null) return new Stock();
  57. return stock;
  58. }
  59. public void Delete(int id)
  60. {
  61. _repository.Delete(id);
  62. }
  63. public void AddOrUpdate(Stock stock)
  64. {
  65. if (stock.Id == 0)
  66. {
  67. _repository.Add(stock);
  68. }
  69. else
  70. {
  71. _repository.Update(stock);
  72. }
  73. }
  74. }
  75. }

OpenAuth.Repository 系统仓储层,实现领域模型中定义的接口

OpenAuth.App 应用层,为界面提供接口

OpenAuth.Mvc 采用基于jquery与bootstrap的B-JUI界面,1.0版中全面实现HTML,javascript,MVC后端代码的分离。如进出库管理加载的执行流程如下:

OpenAuth.UnitTest 单元测试

Infrastructure 与项目无关的通用工具集合

近期规划

功能:

5月份完成权限继承机制;

6月份增加完整的自定义流程事例;

性能:

添加完成的缓存机制;

结构:

根据反馈情况,把结构向真正的DDD方向调整。实现CQRS,适当时候添加AES等机制;

在线演示

在线地址:http://115.28.10.123:1314 (为安全起见,关闭了部分POST请求,如确实有演示修改的请求请留言)

首次发布QQ群:484498493

时间: 2024-11-12 19:48:11

OpenAuth.net的相关文章

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示(文章结尾处给出在线演示链接).相比刚开始时的版本,现在整个架构已经稳定,系统功能性,代码可读性维护性都有质的飞跃. 本文主要介绍系统结构及未来一段时间的开发计划. 项目简介 本项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发的一套符合国情的

OpenAuth.net:.net 领域神级权限管理 2.0 将发布

OpenAuth.net 项目即将迎来年度最大一次更新.强力引入Workflow工作流引擎!尽情期待. 有图有真相: 该项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发的一套符合国情的基于用户和角色的RBAC系统,系统的产生原因及与众不同的地方可以参考:领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net,这里就不过多介绍. 更多OpenAuth.net介绍qkxue.net

python libvirt api openAuth()

使用tcp连接libvirt服务,不适用密码 /etc/libvirt/libvirtd.conf auth_tcp="none" service libvirtd restart import libvirt conn = libvirt.open("qemu+tcp://localhost/system") print conn.getHostname() 使用tcp加密码连接libvirt auth_tcp="sasl" saslpassw

关于OpenAuth.Net被攻击

距离上次写博客应该是1年多以前的事情了,看过我博客的人都知道,我从来不在博客园发技术无关的贴子,除了上次离职.但这次我是实在忍不住了. 今天我个人开源项目OpenAuth.Net发布了最新版(有兴趣戳一下:http://openauth.me/),本来是比较高兴的事情.但下午在外面的时候,有人QQ私信我说官网打不开,当时没在意,以为是哪个应用出问题了,回来搞搞就可以了.晚上21点左右回来的时候,熟练的敲上这个网址.等~~等~~好久(不好的预感!!)耶~~~真不一样!!!! nginx没挂,网站挂

OpenAuth.Net.landv分支之旅开始制作CRM系统

OpenAuth.Net.landv分支之旅开始制作CRM系统 这个事件的由来是因为没有一个统一的会员卡平台系统,目前需要连接三家酒店会员系统,由于三家酒店使用了三种酒店管理系统,彼此之间的耦合低.三家软件直接制作接口也能使用,但是要考虑接入其他系统所以就有了这个OpenAuth.Net.landv分支之旅. OpenAuth.Net是一个开源的权限工作流快速开发框架.框架基于Martin Fowler企业级应用开发思想及全新技术组合(Asp.Net MVC.EF.AutoFac.WebAPI.

第三方应用授权

概述 授权流程 第一步:URL拼接与引导授权 第二步:获取app_auth_code 第三步:使用app_auth_code换取app_auth_token 第四步:代替商户发起请求 概述 商户对第三方应用授权成功之后,第三方应用可以帮助商户完成相应的业务逻辑,比如可以代替商户发起当面付的收单请求: 授权采用标准的OAuth 2.0流程,只有第三方应用才能够使用该授权方案: 第三方应用授权目前只对OpenAPI(2.0)接口有效,适用于所有的第三方应用. 注意:要进行第三方调用,开发者需要开通相

autofac v4.0+通过配置文件的方式注册组件

最近在看李玉宝 / OpenAuth.Net的项目代码,新手表示看不懂.所以,不管三七二十一,模仿是最好的学习,于是我决定自己创建一个项目,把人家的代码一点一点拷贝过来,细细品味. 在研究的过程中,我发现大神用autofac是通过配置文件的方式.Autofac.Configuration的版本是V3.3,然后我创建的项目用的是V4.0.1. 本来是想用代码注册组件的,但是以看到大神是通过配置文件注册的,于是乎,不管三七二十一,我就定下了一个小目标,我要用v4.0.1版本来完成使用配置文件的方式来

2015 年度新增开源软件排名TOP100

本榜单包含 2015 年开源中国新收录的 5977 款开源软件中,根据软件本身的关注度.活跃程度进行排名前 100 名的软件.从这份榜单中或许可以了解到最新业界的趋势. 1.SwitchyOmega 项目简介:SwitchyOmega 是 SwitchySharp 的新版本.这是一个 Chrome 浏览器用来切换不同代理的插件.SwitchyOmega 初次安装时会检查是否存在 SwitchySharp ,如果有的话则会自动升级设置,无须手动配置.如果您使用的是非谷歌应用商店版,或者无法自动升级

细说SSO单点登录

什么是SSO? 如果你已知道,请略过本节! SSO核心意义就一句话:一处登录,处处登录:一处注销,处处注销.即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 很多人容易把SSO与OAuth搞混.这里简单说明一下: OAuth也可简单总结为一句:基于各种懒和YY的原因,拿别人的登录系统来用. 至于官方说的,是一种授权协议,为网站用户授权第三方应用访问自己在网站-(此处省略N多字)可自行百度. SSO实现 SSO的实现方式虽然有很多种,但大的框架不会脱离下图结构的: 即所有