本期概述
在絕大部分資料管理系統中,管理員和普通使用者這2類使用者通常是必不可少的,當然還有更細的分類.前幾期,我們用到的系統使用者只有普通使用者一類.那麼在這一期,我們將在系統中設定2類使用者, 管理員Administrator 和普通使用者NormalUser.
我們在這裡分類使用者的目的是為了區分不同使用者的功能許可權,通常管理員擁有所有功能的使用許可權,而普通使用者只能限制性的使用部分功能(比如只能查看資料,而不修改資料). 當然,管理員可以賦予普通使用者更多的功能許可權,這個在後期隨筆裡面會繼續說明.
原理
原理很簡單,我在之前的使用者登入介面FrmLogin 裡新增了一個全域變數 UserType 用於擷取當前登入使用者的使用者類型,在判斷登入成功的代碼裡賦給一個登入使用者類型(登入類型來自資料庫裡儲存的使用者類型)-Administrator或者NormalUser,在擷取登入使用者類型後, 我們需要設定普通使用者的功能使用許可權, 在那些需要屏蔽相應功能按鈕的表單裡來擷取全域變數 UserType,然後判斷是否為 NormalUser;如果是,則將相應功能按鈕的 Enabled 屬性設定為 false.
首先,我們需要對資料庫做些小的調整,在原先的資料庫表MovieAccount 和Log 裡分別新增一列使用者類型 UserType.
資料庫修改完了,我們開始寫代碼.
首先,在登入表單類FrmLogin.cs 裡新增一條 全域變數UserType, 用於擷取 當前登入使用者的使用者類型.
//定義一個登入全域變數 用來擷取 "登入" 或是"退出"public static string Situation;//---------------------新增代碼----------------------////定義一個全域變數UserType 用來獲 登入使用者的類型public static string UserType;//---------------------新增代碼----------------------//
然後將之前的sql語句稍作修改,增加一個 UserType 欄位.
// 注釋掉之前的select語句 string sql = "select MUserPwd from MovieAccount where MUserName ='" + txtName.Text + "'";//---------------------新增代碼----------------------////這裡新增了 從資料庫裡 擷取UserType 這列的內容 string sql = "select MUserPwd,UserType from MovieAccount where MUserName ='" + txtName.Text + "'";//---------------------新增代碼----------------------//
通過SqlDataReader sdr 來從資料庫中讀取該使用者的類型 並傳給字串 uType.
//則將對應該使用者名稱下的 第一個欄位 即使密碼(MUserPwd為select的第一個欄位) 賦給 字串pwd ,並且依次往後讀取 所有的密碼//Trim()方法為移除字串前後的空白string pwd =sdr.GetString(0).Trim();//---------------------新增代碼-------------------------------////讀取器sdr擷取了2列資料 第1列為密碼 第2列 即索引為1的是使用者類型string uType = sdr.GetString(1);//---------------------新增代碼-------------------------------//
在登入成功後,將字串 uType 擷取的登入類型 賦給全域變數 UserType.
//添加擷取當前登入情況的代碼//擷取目前使用者登入的情況Situation = "登入";//---------------------新增代碼-------------------------------////將登入成功的使用者類型 賦給全域變數UserType//用於擷取當前登入 使用者的類型UserType = uType;//---------------------新增代碼-------------------------------//
這樣當使用者登入系統後,系統就能獲得 登入系統的使用者類型了; 我們到主表單FrmMain上做個小測試.
我們現在主表單FrmMain介面新增一個label框(name:lblSayHi) 用於獲得登入的使用者類型.
然後,在載入表單下添加如下代碼.
//當表單載入的時候 自動運行private void FrmMain_Load(object sender, EventArgs e){ //------------------------------新增代碼----------------------------------// //這裡 新增來一個使用者類型 判斷 FrmLogin.UserType //將當前登入使用者名稱和登入時間賦給label的text屬性 //並在當前主介面表單載入的時候 顯示在label框上 lblCurrentUser.Text = "當前登入使用者為:" + FrmLogin.Uid + " 使用者類型 " + FrmLogin.UserType + " 登入時間為:" + FrmLogin.Time; //------------------------------新增代碼----------------------------------// //------------------------------新增代碼----------------------------------// //給目前使用者打招呼 //這裡通過擷取目前使用者電腦上的時間 以及判斷登入使用者的類型 來給不同類型的使用者打招呼 // 定義整型變數 intTime 來擷取 使用者電腦上的具體小時數 然後在如下進行判斷 int intTime = FrmLogin.Time.Hour; //擷取FrmLogin表單的全域變數 UserType 使用者類型, 用於一下給不同類型的使用者打招呼 string uType = FrmLogin.UserType; //在淩晨0-6點的時候 if (intTime >= 0 && intTime < 6) { if (uType == "Administrator") lblSayHi.Text = "尊敬的 " + FrmLogin.Uid + " 深夜了,該休息了!"; else if (uType == "NormalUser") lblSayHi.Text = "親愛的 " + FrmLogin.Uid + "淩晨了,要趕緊休息哦!"; } //早上6點-中午12點的時候 else if (intTime >= 6 && intTime < 12) { if (uType == "Administrator") lblSayHi.Text = "尊敬的 " + FrmLogin.Uid + " 早上好!"; else if (uType == "NormalUser") lblSayHi.Text = "親愛的 " + FrmLogin.Uid + " 早上好!"; } //中午12點-下午6點的時候 else if (intTime >= 12 && intTime < 18) { if (uType == "Administrator") lblSayHi.Text = "尊敬的 " + FrmLogin.Uid + " 下午好!"; else if (uType == "NormalUser") lblSayHi.Text = "親愛的 " + FrmLogin.Uid + " 下午好!"; } //晚上 else if (intTime >= 18 && intTime < 24) { if (uType == "Administrator") lblSayHi.Text = "尊敬的 " + FrmLogin.Uid + " 晚上好!"; else if (uType == "NormalUser") lblSayHi.Text = "親愛的 " + FrmLogin.Uid + " 晚上好!"; } else //否則 預設為 lblSayHi.Text = "歡迎使用 電影記錄管理系統" + FrmLogin.Uid; //------------------------------新增代碼----------------------------------// //------------------------------新增代碼----------------------------------// //判斷使用者類型 並給使用者佈建功能許可權 if (uType == "NormalUser") { tsbRegistration.Enabled = false; tsbLog.Enabled = false; } //------------------------------新增代碼----------------------------------//}
我們來做個小測試,測試之前,你需要在資料庫 MovieAccount表的 UserType列裏手動插入幾條使用者類型.這裡我得admin1的使用者類型為Administrator.
管理員 admin1 登入
普通使用者 user1 登入
在使用者類型擷取成功之後,我們需要給管理員和普通使用者 分配相應的功能許可權 (管理員預設是擁有所有功能的使用許可權,普通使用者有些功能無法使用).
首先,我們在主表單FrmMain上對普通使用者禁用幾個功能按鈕,(將按鈕的Enabled屬性設定為 false).
這裡禁用了 使用者註冊 和 日誌查看 2個按鈕的功能,(將如下代碼 添加到載入表單下).
//------------------------------新增代碼----------------------------------////判斷使用者類型 並給使用者佈建功能許可權if (uType == "NormalUser"){ tsbRegistration.Enabled = false; tsbLog.Enabled = false;}//------------------------------新增代碼----------------------------------//
我們再來測試下,使用 使用者類型為NormalUser user1登入系統.
user1 登入後,使用者註冊和日誌查詢變為不可用.
然後,在管理介面裡 普通使用者佈建許可權為 可以查看資料 但不能增刪改.
//當系統載入的時候自動顯示DataGridView的資料private void FrmManager_Load(object sender, EventArgs e){ //調用重新整理資料的方法 Refresh(); cmbforTypeSelecting.Text = "全域搜尋"; cmbforTypeSelecting.Items.Add("全域搜尋"); cmbforTypeSelecting.Items.Add("編號"); cmbforTypeSelecting.Items.Add("電影名稱"); cmbforTypeSelecting.Items.Add("導演"); cmbforTypeSelecting.Items.Add("發行時間"); //----------------------新增代碼-------------------// //添加對使用者 類型的判斷 用來設定功能按鈕的使用許可權 if (FrmLogin.UserType == "NormalUser") { btnDelete.Enabled = false; btnAdd.Enabled = false; btnSave.Enabled = false; } //----------------------新增代碼-------------------//}
我們再來測試下,用的還是 普通使用者 user1.但 添加 刪除 和 儲存記錄 3個按鈕 變得置灰(不可用)了.
當然,由於新增了一列UserType,之前的使用者註冊功能(沒有分類使用者) 所以我們得稍作修改.
我們在 使用者註冊表單FrmRegistration上增加2個radiobutton,用於註冊的時候進行使用者分類註冊.
一個是管理員name:rdoAdministrator 一個是普通使用者name: rdoNormalUser
然後,修改之前的使用者註冊代碼.很簡單,主要是在radiobutton的CheckedChanged事件下 增加了 一個uType 類型 用於擷取當前的使用者類型.
然後在之前的Sql插入語句裡 新增了一列 UserType.
//----------------------新增代碼-------------------------////new一個 uType 來擷取 radiobutton 點擊事件下 觸發的使用者類型賦值string uType = "";if (rdoAdministrator.Checked) //當管理員的radiobutton被點擊後 uType = "Administrator"; //傳給 uType 一個管理員else if (rdoNormalUser.Checked) //同理 uType = "NormalUser";else //若不點擊 則預設為普通使用者註冊 uType = "NormalUser";//sql 插入語句 我們新增了 一列 UserTypestring sqlInsert = "insert into MovieAccount(MUserName,MUserPwd,UserType) values(@MUserName,@MUserPwd,@UserType) ";//使用1個SQL參數數組 來裝載 需要插入的資料SqlParameter[] param = { new SqlParameter("@MUserName",txtUid.Text), new SqlParameter("@MUserPwd",txtPwd.Text), new SqlParameter("@UserType",uType) //新增了1個sql參數 uType };//----------------------新增代碼-------------------------//
好了,我們來簡單測試下 新做好的使用者分類註冊.
先註冊個管理使用者 admin03
然後,資料庫裡多了一行資料 admin03, 使用者類型是 Administrator.
我們再註冊一個 普通使用者 user03.
資料庫裡多了 一條user03 使用者類型為 NormalUser
這樣,我們的使用者分類和簡單的功能使用權限設定就完成.感興趣的朋友可以自己動手在日誌查詢那裡新增一列-使用者類型,這裡就不講了.
附上原始碼
MovieRecordManagementSystem07.zip
相關推薦 [點此查看目錄]
- C#簡易電影記錄管理系統:開發一[使用者登入]
- C#簡易電影記錄管理系統:開發二[增刪改查]
- C#簡易電影記錄管理系統:開發三[密碼修改]
- C#簡易電影記錄管理系統:開發四[日誌查看]
- C#簡易電影記錄管理系統:開發五[使用者註冊]
- C#簡易電影記錄管理系統:開發六[資料搜尋]
- C#簡易電影記錄管理系統:開發八[資料備份]
- C#簡易電影記錄管理系統:開發九[資料恢複]
- C#簡易電影記錄管理系統:完結篇[許可權分配]