講人:大石頭 時間:2018-11-14 晚上20:00 地點:釘釘群(組織代碼BKMV7685)QQ群:1600800 內容:魔方Newlife.Cube許可權系統的使用及模版覆蓋詳解 準備 源碼地址: https://github.com/NewLifeX/NewLife.Cube 演示地址:ht ...
- 講人:大石頭
- 時間:2018-11-14 晚上20:00
- 地點:釘釘群(組織代碼BKMV7685)QQ群:1600800
- 內容:魔方Newlife.Cube許可權系統的使用及模版覆蓋詳解
準備
源碼地址: https://github.com/NewLifeX/NewLife.Cube
演示地址:http://cube.newlifex.com 可以直接註冊用戶以及選用第三方登錄
開始
1.初識魔方 魔方後臺結構介紹
魔方是一個基於ASP.NET MVC的多角色的許可權管理系統,新版本的設計目標是所有頁面封裝在DLL裡邊,通過覆蓋修改視圖,做到極簡化的使用
1登錄
其中集成了SSO單點登錄及第三方OAuth登錄,其中既可以作為OAuth客戶端也可以作為OAuth服務端,可以自己內部發佈一個sso伺服器端,只需要發佈cube.dll,xcode.dll,core.dll三個dll的空項目即可
1.1頂部菜單欄
頂部菜單有欄目點擊及用戶修改註銷等功能
1.2工作台首頁
應用系統:地址可以解決Nginx轉發的路徑不對的問題
功能變數名稱地址:多ip或者Nginx代理的顯示
重啟系統功能特別有用(緩存沒有更新,配置沒有生效,重啟後會重新載入,輕量級重啟,不用iis整個重啟
程式集列表:可以分析是否缺少第三方組件的引用
.netcore session不建議使用,所以以後儘量不用session
內部版本,後邊兩個欄位是編譯出來的,編譯時間來自於內部版本比如2.4.6805.17968,其中內部版本號6805基於2000年1月1日的天數,後邊的17968欄位是後邊的秒數除以2的一個結果
1.3左側區域菜單
菜單是樹狀的多層菜單,菜單樹是記憶體計算的,1000對以內會整體緩存,因此菜單更新後不一定實時顯示,因為有緩存,需要重啟一下
2.系統菜單中的4個基本功能
用戶
記錄每個用戶,可以對用戶信息進行管理,其中清除密碼功能比較特別,清除密碼後可以任意密碼登錄,登錄密碼作為新密碼存儲在資料庫中
日誌
日誌作為系統的安全與審計,是不能修改,添加,刪除的.其中包含操作記錄,訪問統計等
角色
系統預設了管理員,游客,普通用戶,高級用戶等幾個角色,其中在第一個預設登錄系統的賬號會自動替換為管理員角色,admin自動降級為游客,角色與名稱可以根據自己的業務進行修改,其中我們支持多角色,一個主角色,多個次要角色,多角色是或的關係,只要有許可權都支持.
菜單
對系統菜單與業務菜單進行編輯與修改,其中系統菜單裡邊修改過後一定要勾選上必要,不然會被魔方初始化覆蓋,其中可見指的是是否在左側菜單欄中顯示,可以自定義許可權
業務菜單
系統啟動後會自動掃描區域與控制器,將區域作為一級菜單載入到資料庫,將控制器作為二級子菜單載入到區域菜單下邊,其中菜單名字通過[DisplayName("菜單名稱")]來註解
3.高級功能
3.1魔方設置
基本設置
對系統的一些基本設置,包括全局調試,日誌等級,日誌目錄,插件伺服器設置等
系統設置
對系統的名稱進行設置,登錄頁,頁面頭部的名稱,其中開發者模式的開關控制著頁面的sql輸出,以及高級功能裡邊的生成Form表單與生成List數據頁的視圖,啟用與否代表整個魔方系統是否啟用
數據中間設置
xcode中間件設置,其中最重要的反向工程設置,預設為on,這個時候會根據實體文件對數據表進行檢測,其中會新增欄位,不能刪除與修改欄位,緩存時間一般是10秒,可以設置預設的備份資料庫目錄,主要針對sqlite文件資料庫
魔方設置
顯示時間控制,作為整個頁面的資料庫查詢時間的一個輔助開發功能設置
插件伺服器設置,這個是所有的插件以及資源伺服器的一個設置
工作台頁面設置,作為一個後臺許可權系統登錄進來展示的首頁
佈局頁設置,是整個mvc佈局頁的一個設置
密碼登錄,啟用註冊,自動註冊強行綁定用戶設置都是跟用戶相關的一些設置
下拉框選擇,其中下拉框開啟後樣式為bootstrap,頁面載入會比較耗時,如果追求極速,可以考慮關閉下拉框選擇
SSL作為https的強制使用
3.2文件
線上的文件管理系統,可以直接上傳bin文件以及下載sqlite的備份文件下載到本地
3.3頁面右邊高級功能
清空數據表:其中清空表是checkident操作,會把自增ID重新從1開始
刪除全部:刪除當前符合查詢條件的全部記錄
導出xml與json,按照xml或者json格式導出當前符合查詢條件的記錄
導出excel,測試過最多導出過90w的記錄
生成Form表單:生成表單視圖模版文件,可以隨意修改視圖頁面
生成List數據模版,隨意修改列表數據頁
4.魔方項目引用及使用
4.1魔方dll的引用
新建.NET Framework MVC項目
在新建項目中右鍵選擇管理Nuget包中搜索NewLife.cube然後安裝到本項目中,該cube.dll會自動引入XCode.dll與core.dll,其中cube所需的資源包,項目會自動下載到Content目錄下邊
安裝完成後會在目錄生成Model.xml與Build.tt文件,其中Model.xml文件是資料庫參考文件
資料庫模型文件詳細說明見圖所標識:
Index為預設主鍵索引,其中表名+主鍵名稱會在實體類Biz.cs中自動生成擴展屬性
4.2實體的生成
在build.tt文件上右鍵選擇運行自定義工具就會在Model.xml文件中設定的目錄下生成實體文件.cs數據文件,biz.cs業務文件,分部類,一個類放在多個文件裡邊,biz.cs只是在第一次生成,以後不會覆蓋生成,.cs每次更新表都會重新生成
4.3魔方的使用區域與控制器
在項目上右鍵在彈出菜單中選擇添加,在子菜單中點擊區域按鈕新增區域Areas,即在左側新建一個一級菜單
我新建了一個Test的區域,修改區域的AreaRegistration文件,將繼承修改為AreaRegistrationBase,並使用註解[DisplayName("區功能變數名稱稱即一級菜單的名稱")]的方式為該菜單的名稱
新建控制器繼承自EntityController<實體類>,會自動生成一個二級子菜單,通過註解[DisplayName("二級菜單的名稱")]
運行得到該實體列表頁,要想列表中某些欄位不顯示,只需要在控制器中的構造方法裡邊輸入ListFields.Remove("列名”)
public class MyUserController : EntityController<Log> { public MyUserController() { ListFields.Remove(Log._.CreateUserID); } }
4.4高級按鈕生成表單與列表的視圖文件
生成模版文件後,點擊工程的顯示所有按鈕,然後在對應的控制器的view目錄下將模版文件包括在項目中,這個時候可以對模版進行任意覆蓋修改,自己可以多修改運行試試效果,特別註意
需要在views下邊的webconfig文件中加入 以下的命名空間
<add namespace="NewLife" />
<add namespace="NewLife.Cube" />
<add namespace="NewLife.Reflection" />
<add namespace="NewLife.Web" />
<add namespace="XCode" />
<add namespace="XCode.Membership" />
5.魔方的精髓 模版覆蓋
5.1模版介紹
模版分為表單模版Form.cshtml,列表模版List.cshtml,佈局模版,每個模版可以分別單獨覆蓋,可以局部整體覆蓋,真正做到任意覆蓋,其中最重要的是可以根據優先順序順序進行整體局部覆蓋,需要整站覆蓋直接修改 Ace_Layout.cshtml
其中優先順序順序依次為項目Views-->控制器Views-->Areas Views-->魔方內置Views
列表模版詳細說明如下:整個模版分為_List_Toolbar.cshtml,_List_Data.cshtml,_List_Pager.cshtml
其中_List_Data.cshtml又包含兩部分數據部分:_List_Data_Item.cshtml 與 操作部分:_List_Data_Action.cshtml
_List_Toolbar.cshtml是最複雜的功能其中包含批量操作_List_Toolbar_Batch.cshtml,日期搜索_List_Search.cshtml對應(_DateRange.cshtml)不知為何要這樣多一個search的頁面,不敢揣摩聖意,關鍵字查詢_List_Toolbar_Search.cshtml,高級按鈕功能,_List_Toolbar_Adv.cshtml
現在示例一下修改Search的查詢:首先在控制器中重載一下Search方法,在實體中實現Search的高級搜索方法
protected override IEnumerable<UserOnline> Search(Pager p) { var id = p["id"];//取當前頁面的id值 //p["q"]關鍵字的值 return UserOnline.Search(p["q"],p); }
最後可以使用自定義工具RazorGenerator將視圖文件編譯成DLL文件,可以聯機搜索安裝
當項目Views同時使用cshtml文件與DLL的時候優先使用cshtml文件
神奇黑科技:http://cube.newlifex.com/School/Class/json?q=11&Sort=ID&Desc=True&key=abcdefg
魔方支持json,xml導出數據,其中key為token,q為關鍵字,sort是排序欄位