魔方Newlife.Cube權限系統的使用及模版覆蓋詳解


  • 講人:大石頭
  • 時間:2018-11-14 晚上20:00
  • 地點:釘釘群(組織代碼BKMV7685)QQ群:1600800
  • 內容:魔方Newlife.Cube權限系統的使用及模版覆蓋詳解

准備

源碼地址: https://github.com/NewLifeX/NewLife.Cube

演示地址:http://cube.newlifex.com  可以直接注冊用戶以及選用第三方登錄

單點登錄:htts://sso.newlifex.com

講課視頻1:https://pan.baidu.com/s/1zEUkG7YXnVdvTLq6dJBhzg

講課視頻2:https://pan.baidu.com/s/10omTlET99DF-4cgG2bObzw

開始

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是排序字段

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM