每一個業務系統都會根據業務需要配置各種各樣的權限,實作方式也是千差萬别,各有各的優缺點。今天我們
利用反射來做一個小的權限管理Demo。也可以說是插件化的權限管理,通用的插件化架構是實作一個接口或者協定,
我們的做法是先展示指定的資料,再去動态的加載需要用到的dll和功能。
大緻的思路是這樣的,我們從服務或者從資料庫裡讀取哪些dll需要加載,相應的dll下哪些頁面可以調用。把這些内容
動态的添加到頁面上,當點選頁面上的元素時利用反射,比對目錄下的dll和dll内的頁面,進行讀取,并顯示進行互動,
從面實作插件化動态加載内容。如下圖所示:
例:
再添加3個類庫ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C;
需要注意的是不要在ReflectionPermissionDemo引用後邊建立好的3個類庫。我們的目标是用反射去加載這些dll庫,
而不是使用引用方式。
建立完後還需要修改他們的輸出路徑屬性
ReflectionPermissionDemo就生成到bin目錄下
其它ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C三個都指向這個
目錄下生成。這樣的目的是讓所有的dll都在同一個檔案夾下。
ReflectionPermissionDemo項目裡修改一下頁面。在頂部添加一個Panel用來動态添加按鈕,這些動态添加上的按鈕就是我們利
用反射動态加載的dll庫。在下邊也添加一個Panel用于動态顯示權限資訊,對應是dll庫裡面有權限的頁面。設定他們的
性Dock一個為Top下邊的為Fill。并給他們命名上邊的panelTop。叫下邊的叫panelBody
在ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C各自建立一些頁面,這些頁面也
需要權限設定的允許才能打開。
在每個頁面上放一個辨別,标明這個窗體與其它的窗體不同,可以根據個人需要,我這裡放的是label寫了一些文字标明每個窗體是
哪個項目的哪個窗體,如下圖:
寫一個單例類,建立一些權限資料,用于模拟從伺服器上傳回的資料。傳回的資料有子產品id,子產品名稱,命名空間和父id。
我們可以把這些數結構想像成一棵樹結構。
先整理一下思路。
1.讀取模拟的權限資料。
2.根據權限資料組織頁面元素
》有哪些dll可以被加載
》相應的dll内有哪些頁面可以被調用
3.點選頁面元素根據儲存的資料利用反射把頁面展示出來。
——————————————————
>先添加一些字段。
>根據權限資料動态組織頁面
> 利用點選不同的元素展示相應的頁面
跑一下,看一下效果