ASP.NET進階權限控管-Part 3 角色管理與角色使用者維護

緣起
承繼前兩篇,從第一篇的【願景】,與第二篇的【樹狀結構畫面維護】,這一篇來談談如何處理角色的部分。角色的意義,請參考小喵第一篇【ASP.NET進階權限控管-Part 1 願景】裡面的說明,這裡就不再贅述了。直接進入到角色的定義、以及角色←→使用者之間的關係如何維護。

先從角色的定義來談起,先看一下角色的欄位說明

緣起

承繼前兩篇,從第一篇的【願景】,與第二篇的【樹狀結構畫面維護】,這一篇來談談如何處理角色的部分。角色的意義,請參考小喵第一篇【ASP.NET進階權限控管-Part 1 願景】裡面的說明,這裡就不再贅述了。直接進入到角色的定義、以及角色←→使用者之間的關係如何維護。

先從角色的定義來談起,先看一下角色的欄位說明

Role

PRole001

RoleUser

PRole002

 

維護畫面設計

角色維護

再來是設計角色的維護畫面、以及角色←→使用者的維護畫面。角色維護畫面其實還蠻簡單的,一個GridView配合一個DetailView就完成了,這部分的程式碼就不再浪費版面。類似以下的畫面,在撰寫的時候要注意,一旦修改或者刪除角色,必須同步的去修改刪除相關的資料表RoleUse(角色使用者設定),MenuP(畫面權限設定)

PRole003 

而角色使用者的維護,這個部分比較有趣了。因為一個人可能擔任數個角色;同樣的,一個角色可能有多人擔任。因此會有兩個方向的維護:

  • 使用者→角色
  • 角色→使用者

使用者→角色

小喵把使用者→角色的部分,跟使用者維護放在一起,這樣操作起來比較直觀,就是設定某個人的個人資料,並且設定該人擔任哪些角色,請看畫面如下:

PRole004 PRole005

這個部分程式上也沒有太大的困難,在使用者設定歸屬角色時,會用到一個技巧【物件導向的購物車(動態新增移除輸入資料) 】不同的是不需要使用Session來記錄,可以改以ViewState處理即可。使用ViewState記錄物件,必須要序列化,這也只需要在設定物件的時候,多宣告成可序列化即可。這裡物件宣告的部分,小喵把他列在下面


<Serializable()> Public Class UserRole
    Dim mRoleId As String
    Dim mRoleDesc As String

    Public Property RoleId() As String
        Get
            Return mRoleId
        End Get
        Set(ByVal value As String)
            mRoleId = value
        End Set
    End Property

    Public Property RoleDesc() As String
        Get
            Return mRoleDesc
        End Get
        Set(ByVal value As String)
            mRoleDesc = value
        End Set
    End Property


End Class

以上的Class不必獨立撰寫,直接寫再使用者維護的aspx.vb裡面即可(一個檔案可以有數個Class)

角色→使用者

接著設計另一個方向:角色→使用者。也就是某個角色,設定哪些使用者擔任這個角色。先看一下畫面如下

PRole006

這部分的設計,方法是衍生自物件導向式資料庫的方式,在畫面上用兩個物件及兩個物件集合即可做到。相關方法請參考小喵在小舖裡發表的一篇文章【ASP.NET 左右ListBox項目動態轉移範例】。一樣的並不需要用到Session,只要用ViewState即可。使用ViewState記得要把物件宣告成可序列化。

 

有了使用者、角色、畫面之後,接著下一篇【ASP.NET進階權限控管-Part 4 【畫面】與【角色/使用者】權限結合】將開始介紹如何設定授權。

^_^


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat