日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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版正式发布的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。