轉(zhuǎn)帖|使用教程|編輯:龔雪|2023-08-11 10:58:09.940|閱讀 200 次
概述:在Winform框架中,其中權(quán)限管理系統(tǒng)、字典管理系統(tǒng),都是可以做成獨(dú)立的程序來(lái)使用,本文主要為大家介紹其中的權(quán)限管理系統(tǒng)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在之前的文章《Winform開(kāi)發(fā)框架之字典數(shù)據(jù)管理》中介紹過(guò)Winform開(kāi)發(fā)框架的總體情況,其中最重要的思路就是把常用的模塊封裝成控件進(jìn)行重復(fù)使用,一則可以避免重復(fù)開(kāi)發(fā),提高開(kāi)發(fā)效率;二則可以使用成熟的控件及技術(shù),使得用戶體驗(yàn)更好,更加專業(yè),在前面介紹過(guò)的Winfrom開(kāi)發(fā)框架總體思路如下所示。
在Winform框架中,其中權(quán)限管理系統(tǒng)、字典管理系統(tǒng),都是可以做成獨(dú)立的程序來(lái)使用,而且應(yīng)該可以在程序中引用來(lái)查詢或者獲取相關(guān)的字典數(shù)據(jù),如找某個(gè)鍵值的字典列表作為下拉列表,而且由于實(shí)際項(xiàng)目中,有的是SqlServer、有的是Access數(shù)據(jù)庫(kù)的或者其他數(shù)據(jù)庫(kù),所以支持多數(shù)據(jù)庫(kù)是最好的選擇。
PS:給大家推薦一個(gè)C#開(kāi)發(fā)可以用到的界面組件——DevExpress WinForms,它能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無(wú)論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!
DevExpress技術(shù)交流群8:523159565 歡迎一起進(jìn)群討論
本篇主要介紹經(jīng)過(guò)優(yōu)化完善的權(quán)限管理系統(tǒng), 其既獨(dú)立又具整合性的權(quán)限管理系統(tǒng),既相互獨(dú)立,有相互整合,方便重用,又不需重新開(kāi)發(fā),非常方便、更提高效率。 由于權(quán)限系統(tǒng)精簡(jiǎn)而又能滿足日常絕大多數(shù)的需要,不會(huì)復(fù)雜的難于管理,而且也是基于角色的授權(quán)訪問(wèn)機(jī)制(RBAC),最重要是非常適合軟件的整合使用。
權(quán)限管理系統(tǒng)作為一個(gè)獨(dú)立的模塊,其主要由登陸界面、權(quán)限管理主界面(管理用戶、角色、機(jī)構(gòu)、功能,以及控制角色的權(quán)限等操作功能,部分界面如下所示。
給用戶分配權(quán)限,首先是給相應(yīng)角色授權(quán),角色授權(quán)功能如下所示,可以編輯角色使用的功能,也可以管理該角色包含的用戶,從而實(shí)現(xiàn)間接實(shí)現(xiàn)給用戶分配權(quán)限的功能(這也是基于業(yè)界通用的基于角色的訪問(wèn)控制(RBAC)的控制法則)。
經(jīng)過(guò)優(yōu)化后的權(quán)限管理系統(tǒng),界面及業(yè)務(wù)邏輯封裝到一個(gè)類庫(kù)中,我們開(kāi)發(fā)的業(yè)務(wù)管理系統(tǒng)中集成就很簡(jiǎn)單了,主要的項(xiàng)目工程界面如下所示:
我編寫了一個(gè)測(cè)試工程,用來(lái)模擬業(yè)務(wù)系統(tǒng)中調(diào)用權(quán)限管理模塊的例子,界面如下所示:
相關(guān)的代碼很簡(jiǎn)單,這也是利用權(quán)限管理系統(tǒng)后簡(jiǎn)化很多代碼的根本所在:
private void Form1_Load(object sender, EventArgs e) { //獲取所有權(quán)限管理系統(tǒng)的用戶,并在下拉列表中展示 List<UserInfo> userList = BLLFactory<User>.Instance.GetAll(); this.txtLogin.Items.Clear(); foreach (UserInfo info in userList) { this.txtLogin.Items.Add(info.Name); } } private void btnSecurity_Click(object sender, EventArgs e) { //獨(dú)立啟動(dòng)權(quán)限管理系統(tǒng),只需一行代碼即可 WHC.Security.UI.Portal.StartLogin(); }
當(dāng)然,如果要判斷用戶的登錄及角色等,可以通過(guò)下面代碼來(lái)實(shí)現(xiàn)。
//判斷用戶是否登錄成功 string identity = BLLFactory<User>.Instance.VerifyUser(this.txtLogin.Text, this.txtPassword.Text, Guid.NewGuid().ToString()); if (!string.IsNullOrEmpty(identity)) { //進(jìn)一步判斷用戶角色 if (BLLFactory<User>.Instance.UserInRole(this.txtLogin.Text, "管理員")) { MessageUtil.ShowTips(string.Format("用戶【{0}】身份驗(yàn)證正確", this.txtLogin.Text)); } else { MessageUtil.ShowWarning("該用戶沒(méi)有管理員權(quán)限"); return; } } else { MessageUtil.ShowWarning("用戶名或密碼錯(cuò)誤"); return; }
權(quán)限控制的精髓就是,用戶登錄后,通過(guò)把用戶擁有的權(quán)限獲取出來(lái),放到一個(gè)功能列表中,然后在每一個(gè)窗體中,根據(jù)用戶的功能列表,顯示或者屏蔽對(duì)應(yīng)的功能即可,獲取功能列表代碼如下所示:
UserInfo info = userBLL.GetUserByName(loginName); #region 獲取用戶的功能列表 Function functionBLL = new Function(); List<FunctionInfo> list = functionBLL.GetFunctionsByUser(info.ID, "WareMis"); if (list != null && list.Count > 0) { foreach (FunctionInfo functionInfo in list) { if (!Portal.gc.FunctionDict.ContainsKey(functionInfo.ControlID)) { Portal.gc.FunctionDict.Add(functionInfo.ControlID, functionInfo); } } } #endregion
判斷的時(shí)候,放在一個(gè)函數(shù),判斷用戶訪問(wèn)的功能是否在列表中即可,代碼如下所示:
/// <summary> /// 看用戶是否具有某個(gè)功能 /// </summary> /// <param name="controlID"></param> /// <returns></returns> public bool HasFunction(string controlID) { bool result = false; if (FunctionDict.ContainsKey(controlID)) { result = true; } return result; }
那么控制用戶顯示的界面代碼如下所示:
#region KTV包間管理 if (Portal.gc.HasFunction("KTV")) { OutlookBarBand myBasicBand = new OutlookBarBand("KTV包間管理"); myBasicBand.SmallImageList = this.imageList; myBasicBand.LargeImageList = this.imageList; if (Portal.gc.HasFunction("KTV/View")) { myBasicBand.Items.Add(new OutlookBarItem("KTV包間狀態(tài)視圖", 0)); } if (Portal.gc.HasFunction("KTV/Setting")) { myBasicBand.Items.Add(new OutlookBarItem("KTV包間設(shè)置", 1)); } if (Portal.gc.HasFunction("KTV/Goods")) { myBasicBand.Items.Add(new OutlookBarItem("KTV商品設(shè)置", 3)); } if (Portal.gc.HasFunction("KTV/Waiter")) { myBasicBand.Items.Add(new OutlookBarItem("KTV服務(wù)生管理", 4)); } if (Portal.gc.HasFunction("KTV/BookIn")) { myBasicBand.Items.Add(new OutlookBarItem("KTV預(yù)訂管理", 5)); } if (Portal.gc.HasFunction("KTV/OtherIncome")) { myBasicBand.Items.Add(new OutlookBarItem("KTV其他款項(xiàng)登記", 6)); } myBasicBand.Background = SystemColors.AppWorkspace; myBasicBand.TextColor = Color.White; outlookBar1.Bands.Add(myBasicBand); } #endregion
判斷菜單或者功能按鈕,也只需要判斷某功能點(diǎn)是否在已有集合中即可,如下所示:
/// <summary> /// 根據(jù)權(quán)限屏蔽功能 /// </summary> private void InitAuthorizedUI() { this.tool_Report.Enabled = Portal.gc.HasFunction("Report"); this.tool_Dict.Enabled= Portal.gc.HasFunction("Dictionary"); this.tool_ItemDetail.Enabled = Portal.gc.HasFunction("ItemDetail"); this.tool_Purchase.Enabled = Portal.gc.HasFunction("Purchase"); this.tool_StockSearch.Enabled = Portal.gc.HasFunction("StockSearch"); this.tool_TakeOut.Enabled = Portal.gc.HasFunction("TakeOut"); this.menu_WareHouse.Enabled = Portal.gc.HasFunction("WareHouse"); this.menu_Dictionary.Enabled = Portal.gc.HasFunction("Dictionary"); this.menu_run_systemLog.Enabled = Portal.gc.HasFunction("LoginLog"); this.menu_Parameters.Enabled = Portal.gc.HasFunction("Parameters"); this.menu_MonthlyStatistic.Enabled = Portal.gc.HasFunction("MonthlyStatistic"); this.menu_AnnualStatistic.Enabled = Portal.gc.HasFunction("AnnualStatistic"); this.menu_ClearAll.Enabled = Portal.gc.HasFunction("ClearAllData"); this.menu_ImportItemDetail.Enabled = Portal.gc.HasFunction("ImportItemDetail"); }
至此,權(quán)限管理模塊介紹已經(jīng)完畢,下面給出一個(gè)調(diào)用例子Demo程序給大家參考學(xué)習(xí),下載地址如下:
前一篇文件的字典組件模塊調(diào)用例子Demo程序下載地址也一并提供下載,下載地址如下:
本文轉(zhuǎn)載自:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: