基于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
原文地址:http://www.cnblogs.com/yubaolee/p/OpenAuthNet.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
基于DDDLite的权限管理OpenAuth.net 1.0版正式发布相关推荐
- Spring Security基于角色的权限管理
1.Spring Security 1.1核心领域概念 认证(Authentication):认证是建立主体(principal)的过程. 主体通常是指在应用程序中执行操作的用户.设备或其他系统 授权 ...
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心...
基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...
- 从零开始——基于角色的权限管理01(补充)
此博文较为详细的介绍从零开始--基于角色的权限管理01文中的两个部分的流程(解释代码). 1) index.jsp中提交跳转action action的login,获取jsp页面传过来的用户名密码和验 ...
- 基于面向对象的权限管理系统设计与实现[1]
基于面向对象的权限管理系统设计与实现[1] 2007-9-20 作者:王如龙 网友评论 0 条 点击进入论坛 摘要:针对大型计算机应用系统对权限管理的要求,提出了采用面向对象技术,实现权限管理的思想, ...
- Jenkins 中基于角色的权限管理
Jenkins 中基于角色的权限管理 原文地址: Jenkins 中基于角色的权限管理 | 超级小豆丁 (mydlq.club) 系统环境: Jenkins 版本:2.213 一.简介 Jenkins ...
- 通用权限管理组件使用说明书V3.0 错误校正 感谢自由软件职业者Helper(767870484)...
有时候,真想做个像样的东西出来,但是往往各方面的能力都不够,这么多人,Helper(767870484)仔细认真的阅读了这个帮助手册.并给给于了指正,在这里非常感谢,你的劳动成果已经被通用权限管理积累 ...
- python基于值的自动内存管理方式是什么_Python采用的是基于值得自动内存管理方式。(2.0分)_学小易找答案...
[多选题]下列有关关键绩效指标表述正确的是( ) [单选题]上级和员工之间以持续沟通来预防和解决员工实现绩效时可能发生的各种问题的过程,这是绩效管理的( )环节 [单选题]下列有关双因素理论的描述中, ...
- RBAC新解 - 基于资源的权限管理
1.什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念.角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么.不能做什么.用户帐号往往与角色相关联,因此,一个用户在软件系 ...
- jenkins组权限_Jenkins 中基于角色的权限管理
!版权声明:本博客内容均均为原创,每篇博文作为知识积累,写博不易,转载请注明出处. 目录[-] 系统环境: Jenkins 版本:2.213 一.简介 Jenkins 一般应用于项目构建与持续集成中, ...
最新文章
- es6数组去重_JavaScript数组去重
- opencv_4.5.0/OpenCvSharp4.0 九点标定
- mx250 计算能力_熟悉的刀法:英伟达 MX 250 也有 25W 和 10W 两个版本
- How to use fb.data.query to get friends info?
- EXCEL数据导入dataset
- 143_Power BIPower Pivot月度、季度、半年度、全年同维度展示
- php monolith,单体架构(Monolith)与微服务架构(MicroService)
- TensorFlow实战3——TensorFlow实现CNN
- lambda表达式不使用委托(delegate) 用FUNC
- bzoj4987: Tree(树形dp)
- js 时间格式与时间戳的相互转换示例代码
- QT cmd强制删除文件
- 一篇“从入门到上手”的Solidworks机械设计教程
- HTML3个炫酷代码
- 机器学习第四篇----MAB(多臂老虎机)一次失败的尝试
- 成熟职场男人的十大标准
- 百度地图电子围栏判断 地图定位
- 计算机网络简答题复习要点
- Linux学习笔记2(root密码忘记重置,Linux系统更新yum源,YUM安装卸载,常见故障排除,vim,用户/组)
- 【Android Audio】dumpsys audio分析【不定期更新文章】
热门文章
- Nutch 是一个开源Java 实现的搜索引擎
- 一次面试引发的思考(中小型网站优化思考) (转)
- json_encode ajaxReturn getJSON
- 深入了解Oracle ASM(一):基础概念
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...
- 在终端(Terminal)中用颜色显示不同类型文件
- 饿了么超级会员,年卡低至108元!饿了么会员,点外卖超省钱!
- 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)
- 技术分享 | 微服务模式下如何高效进行API测试
- WPF Treeview第三层横向排列