C 实现基于角色的权限系统
生活随笔
收集整理的這篇文章主要介紹了
C 实现基于角色的权限系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文demo下載地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1068
實例使用C# 實現基于角色的權限菜單管理系統, 管理員可以添加用戶,刪除用戶, 添加分組,刪除分組, 添加角色,刪除角色,為角色關聯權限等功能, 管理員用戶自定義各個操作員的權限菜單標題
項目對應的實例代碼可以通過右側【下載實例】按鈕獲取
開發工具: VS2012 數據庫: SQLServer
【項目包含內容】(見下圖):
【實例代碼】
【DBScript】 腳本
【WinForm中實現基于角色的權限菜單詳解.txt】 代碼詳解
【實例簡介】
C# WinForm中實現基于角色的權限菜單的完整源碼,數據庫腳本在DBscript目錄下,在sql server 依次執行如下腳本即可
執行完畢后 修改下 app.config中的數據庫連接串 為你本機的即可
【實例截圖】
下面為管理員登陸后的效果
管理員賬號:admin
密碼:666666
下面為普通用戶登陸后的效果:
普通用戶名:user 密碼 111111
【核心代碼】
| /// <summary> /// 根據操作員名稱和密碼獲取操作員實體 /// </summary> /// <param name="name">操作員名稱</param> /// <param name="pwd">操作員密碼</param> /// <returns>操作員實體</returns> public?Model.Operator GetOperatorInfoByName(string name, string pwd) { //SQL命令 string sqltxt = string.Format("Select Id, OperatorName, Password, RightsList, State From Operator Where OperatorName = '{0}' And Password = '{1}'", name, pwd); //創建操作員實體 Model.Operator tmpOperator =?new?Model.Operator(); // 轉換數據庫存儲的 二進制數據為 Byte[] 數組 以便進而轉換為操作員權限集合 // 從配置文件讀取連接字符串 string connectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString; // 執行 SQL 命令 using (SqlConnection conn =?new?SqlConnection(connectionString)) { SqlCommand cmd =?new?SqlCommand(sqltxt, conn); conn.Open(); using (SqlDataReader myReader = cmd.ExecuteReader( CommandBehavior.CloseConnection | CommandBehavior.SingleResult | CommandBehavior.SingleRow)) { if?(myReader.Read()) { //將數據集轉換成實體集合 tmpOperator.Id = Convert.ToInt32(myReader["Id"]); tmpOperator.ModelName = Convert.ToString(myReader["OperatorName"]); tmpOperator.Password = Convert.ToString(myReader["Password"]); tmpOperator.State = Convert.ToBoolean(myReader["State"]); // 讀取權限集合 System.Data.SqlTypes.SqlBytes bytes = myReader.GetSqlBytes(3);?// 只能指定列序號 // 將流反序列化為權限集合對象 BinaryFormatter bf =?new?BinaryFormatter(); if?(!bytes.IsNull) tmpOperator.RightsCollection = (bf.Deserialize(bytes.Stream) as Dictionary<string, Model.Rights>); //else // throw new Exception(string.Format("操作員 [{0}] 沒有任何權限,禁止登錄!", tmpOperator.ModelName)); } else //如果沒有讀取到內容則拋出異常 throw?new?Exception("登錄名稱或用戶密碼不正確!"); } } // 如果操作員已經被禁用 if?(!tmpOperator.State) throw?new?Exception(string.Format("操作員 [{0}] 已被禁用,請與管理員聯系!", tmpOperator.ModelName)); // 返回結果 return?tmpOperator; } /// <summary> /// 添加操作員 /// </summary> /// <param name="addOperator">要添加的操作員實體</param> /// <returns>True:成功/False:失敗</returns> public?bool AddOperator(Model.Operator addOperator) { // 驗證密碼長度 if?(addOperator.Password.Trim().Length <?6) throw?new?Exception("用戶密碼長度不能小于六位!"); // 轉換操作員權限集合為數據庫可存取的 Byte[] 數組 MemoryStream ms =?new?MemoryStream(); BinaryFormatter bf =?new?BinaryFormatter(); bf.Serialize(ms, addOperator.RightsCollection); byte[] rigthsByteArray =?new?byte[(int)(ms.Length)]; ms.Position =?0; ms.Read(rigthsByteArray,?0, (int)(ms.Length)); ms.Close(); // 拼接 SQL 命令 string sqlTxt =?"Insert Into Operator (OperatorName, Password, RightsList, State) Values " "(@OperatorName, @Password, @RightsList, @State)"; // 從配置文件讀取連接字符串 string connectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString; // 執行 SQL 命令 using (SqlConnection conn =?new?SqlConnection(connectionString)) { SqlCommand cmd =?new?SqlCommand(sqlTxt, conn); SqlParameter prm1 =?new?SqlParameter("@OperatorName", SqlDbType.NVarChar,?50); prm1.Value = addOperator.ModelName; SqlParameter prm2 =?new?SqlParameter("@Password", SqlDbType.NVarChar,50); prm2.Value = addOperator.Password; SqlParameter prm3 =?new?SqlParameter("@RightsList", SqlDbType.VarBinary, rigthsByteArray.Length, ParameterDirection.Input,?false,?0,?0,?null, DataRowVersion.Current, rigthsByteArray); SqlParameter prm4 =?new?SqlParameter("@State", SqlDbType.Bit); prm4.Value = addOperator.State; cmd.Parameters.AddRange(new?SqlParameter[] { prm1, prm2, prm3, prm4 }); conn.Open(); if?(cmd.ExecuteNonQuery() >=?1) return?true; else return?false; } } /// <summary> /// 刪除操作員 /// </summary> /// <param name="id">要刪除的操作員 ID</param> /// <returns>True:成功/False:失敗</returns> public?bool DeleteOperatorByID(int?id) { // 刪除單個信息 SQL 命令 string sqlTxt = string.Format("Delete From Operator Where Id = {0}", id); // 創建 SQL 執行對象 DBUtility.AbstractDBProvider dbProvider = DBUtility.AbstractDBProvider.Instance(); // 執行 刪除操作 int?rowsAffected; dbProvider.RunCommand(sqlTxt, out rowsAffected); if?(rowsAffected >=?1) return?true; else return?false; } /// <summary> /// 修改操作員 /// </summary> /// <param name="currentOperator">要修改的操作員實體</param> /// <returns>True:成功/False:失敗</returns> public?bool ModifyOperator(Model.Operator currentOperator) { // 驗證密碼長度 if?(currentOperator.Password.Trim().Length <?6) throw?new?Exception("用戶密碼長度不能小于六位!"); // 轉換操作員權限集合為數據庫可存取的 Byte[] 數組 MemoryStream ms =?new?MemoryStream(); BinaryFormatter bf =?new?BinaryFormatter(); bf.Serialize(ms, currentOperator.RightsCollection); byte[] rigthsByteArray =?new?byte[(int)(ms.Length)]; ms.Position =?0; ms.Read(rigthsByteArray,?0, (int)(ms.Length)); ms.Close(); // 拼接 SQL 命令 string sqlTxt =?"Update Operator Set OperatorName = @OperatorName, " "Password = @Password, RightsList = @RightsList, State = @State Where Id = @Id"; // 從配置文件讀取連接字符串 string connectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString; // 執行 SQL 命令 using(SqlConnection conn =?new?SqlConnection(connectionString)) { SqlCommand cmd =?new?SqlCommand(sqlTxt, conn); SqlParameter prm1 =?new?SqlParameter("@OperatorName", SqlDbType.NVarChar,?50); prm1.Value = currentOperator.ModelName; SqlParameter prm2 =?new?SqlParameter("@Password", SqlDbType.NVarChar,50); prm2.Value = currentOperator.Password; SqlParameter prm3 =?new?SqlParameter("@RightsList", SqlDbType.VarBinary, rigthsByteArray.Length, ParameterDirection.Input,?false,?0,?0,?null, DataRowVersion.Current, rigthsByteArray); SqlParameter prm4 =?new?SqlParameter("@State", SqlDbType.Bit); prm4.Value = currentOperator.State; SqlParameter prm5 =?new?SqlParameter("@Id", SqlDbType.Int); prm5.Value = currentOperator.Id; cmd.Parameters.AddRange(new?SqlParameter[] { prm1, prm2, prm3, prm4, prm5 }); conn.Open(); if?(cmd.ExecuteNonQuery() >=?1) return?true; else return?false; } } /// <summary> /// 獲取所有操作員信息 /// </summary> /// <returns>操作員實體集合</returns> public?Dictionary<string, Model.Operator> GetAllOperatorInfo() { //SQL命令 string sqltxt =?"Select Id, OperatorName, Password, RightsList, State From Operator"; //創建操作員實體集合 Dictionary<string, Model.Operator> operatorCollection =?newDictionary<string, Model.Operator>(); //定義操作員實體 Model.Operator tmpOperator =?null; // 轉換數據庫存儲的 二進制數據為 Byte[] 數組 以便進而轉換為操作員權限集合 // 從配置文件讀取連接字符串 string connectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString; // 執行 SQL 命令 using (SqlConnection conn =?new?SqlConnection(connectionString)) { SqlCommand cmd =?new?SqlCommand(sqltxt, conn); conn.Open(); using (SqlDataReader myReader = cmd.ExecuteReader( CommandBehavior.CloseConnection)) { while?(myReader.Read()) { // 創建操作員實體 tmpOperator =?new?Model.Operator(); //將數據集轉換成實體集合 tmpOperator.Id = Convert.ToInt32(myReader["Id"]); tmpOperator.ModelName = Convert.ToString(myReader["OperatorName"]); tmpOperator.Password = Convert.ToString(myReader["Password"]); tmpOperator.State = Convert.ToBoolean(myReader["State"]); // 讀取權限集合 System.Data.SqlTypes.SqlBytes bytes = myReader.GetSqlBytes(3);?// 只能指定列序號 // 將流反序列化為權限集合對象 BinaryFormatter bf =?new?BinaryFormatter(); if?(!bytes.IsNull) tmpOperator.RightsCollection = (bf.Deserialize(bytes.Stream) as Dictionary<string, Model.Rights>); // 添加到操作員實體集合 operatorCollection.Add(tmpOperator.ModelName, tmpOperator); } } } // 返回結果 return?operatorCollection; } /// <summary> /// 根據操作員名稱校驗操作員是否存在 /// </summary> /// <param name="operatorName">操作員名稱</param> /// <returns>True:存在/Flase:不存在</returns> public?bool CheckOperatorExist(string operatorName) { //創建查詢信息的 SQL string sqlTxt = string.Format( "Select Count(*) From Operator Where OperatorName = '{0}'", operatorName); //創建SQL執行對象 DBUtility.AbstractDBProvider dbProvider = DBUtility.AbstractDBProvider.Instance(); //執行查詢操作 int?result = Convert.ToInt32(dbProvider.RunCommand(sqlTxt)); if?(result >=?1) return?true; else return?false; } #endregion |
轉載于:https://www.cnblogs.com/lg100010/p/8971744.html
總結
以上是生活随笔為你收集整理的C 实现基于角色的权限系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一、自定义参数解析
- 下一篇: java信息管理系统总结_java实现科