天天看點

【權限的思考】(一)使用反射實作動态權限

  每一個業務系統都會根據業務需要配置各種各樣的權限,實作方式也是千差萬别,各有各的優缺點。今天我們

利用反射來做一個小的權限管理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.點選頁面元素根據儲存的資料利用反射把頁面展示出來。

——————————————————

 >先添加一些字段。

>根據權限資料動态組織頁面

> 利用點選不同的元素展示相應的頁面

跑一下,看一下效果

【權限的思考】(一)使用反射實作動态權限

繼續閱讀