基于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
演示地址在文章结尾处给出:)
当前项目功能:
- 模块权限 实现模块的自定义及权限分配;
- 菜单权限 实现菜单的自定义及权限分配;
- 资源权限 实现资源的自定义及权限分配,主要是为了给第三方应用提供服务;
- 实现用户分配角色,也可以直接给用户分配模块/菜单;
- 基于ASP.NET Identity登录;
- 实现一个简单的进出库管理的例子,在例子中使用admin,test登录或直接以“开发者账号”登录,看到的结果是不同的;
项目这一年里都发生了什么?
准确的说应该是5个月来发生了什么,因为项目正式发布刚刚5个多月的时间。最高兴的应该是入选了:开源中国2015 年度新增开源软件排名 TOP 100 在新入选的5977个项目中位列第69。也算为C#那可怜的开源份额做点贡献了!
系统架构
首先到底什么是经典DDD架构?
DDD:领域驱动设计,以领域业务为核心的设计。什么?这是屁话,很多书上都介绍过?
那我就从代码的角度来解释就是:丫就是你的XXXBLL模块不要引用诸如XXXDAL/XXXHELPER等模块并且能够实现系统的业务逻辑,基本就是了。如下图:

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

OpenAuth.Domain 系统领域层,当前领域层主要有下面三部分组成:
- 领域对象:系统核心对象;
- 领域接口:当前主要是数据库访问的仓储接口,具体的实现在OpenAuth.Repository中实现;
- 领域服务:系统的多对象交互业务处理。由于当前的业务复杂度比较低,业务主要是以领域服务的形式出现。如项目中的“进出库管理服务”:
using System;
using System.Linq;
using System.Linq.Expressions;
using OpenAuth.Domain.Interface; namespace OpenAuth.Domain.Service
{
/// <summary>
/// 领域服务
/// <para>进出库管理服务</para>
/// </summary>
public class StockManagerService
{
private IStockRepository _repository;
private IOrgRepository _orgRepository;
private AuthoriseService _authoriseService; public StockManagerService(IStockRepository repository,
IOrgRepository orgRepository, AuthoriseService service)
{
_repository = repository;
_orgRepository = orgRepository;
_authoriseService = service;
} /// <summary>
/// 根据部门ID得到进出库信息
/// </summary>
public dynamic Load(string username, int orgId, int pageindex, int pagesize)
{ _authoriseService.GetUserAccessed(username);
if (_authoriseService.Orgs.Count == 0) //用户没有任何可见机构
{
return new
{
total = 0,
pageCurrent = pageindex
};
} var orgIds = _authoriseService.Orgs.Select(u => u.Id).ToArray(); //用户可访问的机构ID var orgs = _orgRepository.GetSubWithOwn(orgId) //点击的节点与用户可访问的机构合并
.Where(u => orgIds.Contains(u.Id))
.Select(u => u.Id).ToArray(); var keys = _authoriseService.Resources.Select(r => r.Key); //用户可访问的资源的KEY列表 //由于库存Stock表开始没有设计资源有关的字段,暂时用User字段代替
Expression<Func<Stock, bool>> exp = u => orgs.Contains(u.OrgId) && (u.User == "" || keys.Contains(u.User));
var stocks = _repository.Find(pageindex, pagesize, "", exp);
int total = _repository.GetCount(exp); return new
{
total = total,
list = stocks,
pageCurrent = pageindex
};
} public Stock Find(int id)
{
var stock = _repository.FindSingle(u => u.Id == id);
if (stock == null) return new Stock(); return stock;
} public void Delete(int id)
{
_repository.Delete(id);
} public void AddOrUpdate(Stock stock)
{ if (stock.Id == 0)
{
_repository.Add(stock);
}
else
{
_repository.Update(stock);
} }
}
}
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
基于DDDLite的权限管理OpenAuth.net 1.0版正式发布的更多相关文章
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- DDDLite的权限管理
领域驱动设计实战—基于DDDLite的权限管理 在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒 ...
- 10.spring-boot基于角色的权限管理页面实现
10.spring-boot基于角色的权限管理页面实现
- 【shiro】(5)---基于Shiro的权限管理
基于Shiro的权限管理项目搭建 前面写了四篇有关权限的文章,算是这篇文章的铺垫了.这篇文章采用 开发环境 JDK1.8 Eclipse Mav ...
- 【shiro】(2)---基于RUL的权限管理
基于RUL的权限管理 我想在写shiro权限管理认证前,先来一个基于URL实现的权限管理控制. 一.基于URI的权限业务逻辑 实现思路: 将系统操作的每个url配置在权限表中,将权限对应 ...
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心
基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...
- devops-jenkins基于角色的权限管理RBAC
一. devops-jenkins基于角色的权限管理RBAC 1 安装角色的rbac角色管理 1.1) 点击系统管理 1.2) 选择插件管理 1.3) 选择可选插件,输入role搜索 1.4) 选择 ...
- 基于RBAC实现权限管理
基于RBAC实现权限管理 技术栈:SpringBoot.SpringMVC RBAC RBAC数据库表 主体 编号 账号 密码 001 admin 123456 资源 编号 资源名称 访问路径 001 ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
随机推荐
- 【AR实验室】ARToolKit之Example篇
0x00 - 前言 PS : 我突然意识到ARToolKit本质可能就是一个可以实时求解相机内外参的解决方案. 拿到一个新的SDK,90%的人应该都会先跑一下Example.拿到ARToolKit的S ...
- 2015 西雅图微软总部MVP峰会记录
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
- 浅谈WEB页面提速(前端向)
记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...
- Sublime Text 3中文乱码解决方法以及安装包管理器方法
一般出现乱码是因为文本采用了GBK编码格式,Sublime Text默认不支持GBK编码. 安装包管理器 简单安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令 ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- DBA成长路线
从开发转为数据库管理,即人们称为DBA的已经有好几年,有了与当初不一样的体会.数据是企业的血液,数据是石油,数据是一切大数据.云计算的基础.作为DBA是数据的保卫者.管理者,是企业非常重要的角色.对于 ...
- 我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)
前言 你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你.本文将介绍创建Web Api 帮助文档页面的两种方式,Microsoft Help ...
- 太多选择——企业如何选择合适的BI工具?
在没认清现状前,企业当然不能一言不合就上BI. BI不同于一般的企业管理软件,不能简单归类为类似用于提高管理的ERP和WMS,或用于提高企业效率的OA.BPM.BI的本质应该是通过展现数据,用于加强企 ...
- SQL-日期函数
GETDATE() :取得当前日期时间 DATEADD (datepart , number, date ),计算增加以后的日期.参数date为待计算的日期:参数number为增量:参数datepar ...
- linux常用命令(1)cd命令
1 命令格式:cd [目录名]2 命令功能切换当前目录至dirName3 常用范例3.1 进入系统根目录cd /3.2 进入上级目录cd .. 或者 cd ..//3.3 进入当前用户主目录当前用 ...