基於asp.net2.0中membership系統角色、使用者、資源的許可權設計

來源:互聯網
上載者:User

經常做系統,系統中都要求有使用者、角色的許可權分配,所以今日對其進行總結下自己的觀點。
首先我的使用者管理系統都是基於微軟的membership的,所以首先要將其安裝配置到系統中,安裝方法請看這裡《如何配置安裝membership》,這裡就不再贅述了。
我的結構是這樣的:
表:
membership已經為我們提供了使用者表與許可權表(aspnet_Roles、aspnet_Membership、aspnet_Users),還有其它一些輔助作用的表。我的membership基於這些表,那麼每個系統的使用者屬性肯定不會一樣,所以需要建立自己的“使用者資訊表”,使用者資訊表要與aspnet_Membership表相關聯,這樣就解決了系統中的使用者資訊多變化的情況。membership中的aspnet_UsersInRoles表已經將使用者與角色相關聯了,不必我們再操心了。
大致思想:
為了實現後期靈活對使用者的許可權進行線上即時配置,所以使用者不直接面對資源(資源可以簡單的理解為系統中的一個網頁),由角色來直接面對資源(角色與資源之間的映射通過xml檔案來配置),使用者與角色之間membership已經給我們提供了很多強大的方法來支援了,所以整個成員資格管理系統就變得簡單了,後期也很好的維護了。
大多系統後台架構是上中下結構,中間又分為左右架構,左邊一般是系統的管理連結,我用的是PanelBar控制項結合xml檔案《查看.net系統中如何使用PanelBar控制項》,程式根據當前登陸使用者的角色動態載入xml檔案中的內容,這樣就非常輕鬆的實現了資源根據角色的動態綁定。

PanelBar效果

 
角色管理圖

 
角色下使用者的配置圖

 
部分代碼:
PanelBar所調用的xml檔案部分代碼:
註: UserDataString屬性對應的就是角色的名稱
每一項(含組、細節)均有一個UserDataString屬性,UserDataString與membership中的角色對應
如果組中的UserDataString屬性為空白,則意味這個組為公用角色群組,都可以進入
如果細節中的UserDataString屬性為空白,則意味只要能進入這個組中的角色使用者都可以管理它
根據組中的UserDataString和細節中的UserDataString可以靈活配置許可權
<Group Caption="使用者基本資料管理" UserDataString="使用者基本資料管理">
<Item Caption="基礎資料維護" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
<Item Caption="密碼修改" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
</Group>
<Group Caption="系統基礎資料管理" UserDataString="系統基礎資料管理">
<Item Caption="省市縣資料管理" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
<Item Caption="項目類型資料管理" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
<Item Caption="公司部門資料管理" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
</Group>
<Group Caption="公告管理" UserDataString="公告管理">
<Item Caption="發布公告" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
<Item Caption="管理公告" IconImage="/item.gif" Target="main" URL="#" UserDataString="" />
</Group>
<Group Caption="系統管理" UserDataString="系統管理">
<Item Caption="角色管理" IconImage="/item.gif" Target="main" URL="membership/role_add.aspx" UserDataString="" />
<Item Caption="Database Backup" IconImage="/item.gif" Target="main" URL="backdata.aspx" UserDataString="" />
</Group>
使用者登陸後對xml檔案進行動態載入,只選擇屬於目前使用者角色的資源項:
/// <summary>
/// 由目前使用者的登入角色進行定位
/// </summary>
/// <param name="roles">角色列表</param>
private void bindGUdata(string[] roles)
{
if (roles.Length > 0)//當前登陸使用者有角色
{
string tmpudata = "";
object mytpmo;
for (int i = 0; i < this.PanelBar1.Groups.Count; i++)
{
mytpmo=this.PanelBar1.Groups[i].UserData;
if (mytpmo != null)
{
tmpudata = mytpmo.ToString().Trim();
}
else
{
tmpudata = "";
}
if (tmpudata!="")//看是否屬於公用模組
{
if (!Common.commonother.checkArray(roles, tmpudata))//看使用者是否有此組許可權
{
this.PanelBar1.Groups.Remove(i);//沒有則移除
i = -1;
}
else//如果有組的許可權看細節的許可權
{
this.commonitems(this.PanelBar1.Groups[i].Items, roles);
}
}
else//屬於公用模組則檢查它的細節
{
this.commonitems(this.PanelBar1.Groups[i].Items, roles);
}
}
}
else//沒有任何角色則全部清空
{
this.PanelBar1.Groups.Clear();
}

}

/// <summary>
/// 細節許可權控制
/// </summary>
/// <param name="itemss">所在許可權組的序列</param>
/// <param name="roles">所檢查的使用者的許可權</param>
private void commonitems(Coalesys.PanelBar.Items itemss, string[] roles)
{
string tmpudata2 = "";
object tmpo;
for (int j = 0; j < itemss.Count; j++)
{
tmpo=itemss[j].UserData;
if (tmpo != null)
{
tmpudata2 = tmpo.ToString().Trim();
}
else
{
tmpudata2 = "";
}
if (tmpudata2 != "")//有細節許可權控制
{
if (!Common.commonother.checkArray(roles, tmpudata2))//看使用者是否有此細節許可權
{
itemss.Remove(j);//沒有則移除
j = -1;
}
}
}
}
在使用者登陸後台時進行判斷載入:

 if (!this.IsPostBack)
        {
            bindPannelBar();//載入PannelBar控制項,說見《Coalesys PanelBar for ASP.NET 控制項的使用》
            bindGUdata(Roles.GetRolesForUser());//調用上面我寫的函數。
        }
OK,上述的membership構架介紹完畢,基本是個通用的,您做任何一個有成員管理系統的都可以用到,而且後期管理維護也非常方便。


文章來源(WEB開發技術知識庫):http://cn-web.com/cnweb/0/464/article/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.