基于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版正式发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [开源 .NET 跨平台 数据采集 爬虫
- 下一篇: TFS2015的CI集成