為什么要開源?
有句:“贈人玫瑰,手有余香。”,在園子里學習有些一時間了,得到了很多人的幫助,我自已練習做了一套基於Winform的管理類小軟件《小菜用戶權限管理軟件》,只當學習用,今天匯總一下開源分享給大家。
我這個框架集成了好幾個有用的框架:WeifenLuo.WinFormsUI.Docking.dll布局組件,分頁組件,皮膚套件等,我在整體色調等方面做了些優化,讓整個系統看起來比較協調。
當然,還有很多不足的,畢竟這是練習嘛~~如投入商業使用還是有很多限制的。
現在開始描述一下這個系統的具體情況,給有興趣的朋友研究帶來便利。
軟件整體架構
軟件分為四個模塊:用戶管理,部門管理,角色管理,功能管理。平台主要是基於Winform,.Net FrameWork 4.0,支持SQL Server,Oracle,MySql,只要在配置文件中切換就可以。
操作數據層集成了NHibernate框架組件:XiaoCai.ORM.dll,軟件框架集成多功能組件XiaoCai.WinformUI.dll:涉及的有用功能有分頁控件,多文檔界面布局(像Visual Studio一樣的布局效果喔),仿Outlook的OutLookBar導航,界面啟動時的閃屏效果增強用戶體驗,系統托盤效果。
整體架構,如下圖:
項目結構
- 引入類庫
軟件模塊介紹
用戶登錄模塊:
用戶登錄成功后閃屏效果:
主界面整體效果:

用戶管理模塊界面:
程序配置文件
<?xml version="1.0"?> <configuration> <appSettings> <add key="FMS.Web.Services.INIService" value="http://localhost/OAServices/INIService.asmx"/> <!-- Database with WebService --> <add key="FMS.Remote" value="N"/> <add key="FMS.GlobalSessionFactory" value="XiaoCai.Auth.DAL.Global.SQLServerSessionFactory,XiaoCai.Auth.DAL.Global"/> <!--<add key="FMS.GlobalSessionFactory" value="XiaoCai.Auth.DAL.Global.MySQLSessionFactory,XiaoCai.Auth.DAL.Global" />--> <!--<add key="FMS.GlobalSessionFactory" value="XiaoCai.Auth.DAL.Global.OracleSessionFactory,XiaoCai.Auth.DAL.Global" />--> <!-- Database without WebService --> <add key="FMS.Database.MySQLConn" value="server=localhost;user id=root;password=12345;database=SecurityDB;character set=utf8"/> <add key="FMS.Database.SqlServerConn" value="Data Source=localhost,1433;Network Library=DBMSSOCN;Initial Catalog=SecurityDB;User ID=root;Password=12345;"/> <add key="FMS.Database.OracleServerConn" value="User Id=AGANQIN;Password=12345;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SID=SecurityDB)(SERVER=DEDICATED)));"/> </appSettings> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
程序源碼運行注意
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace XiaoCai.SecurityManager { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Auth.App.Core.AppCore.Startup();//程序序動時,加這么一句 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new LoginForm()); } } }
數據庫文件
- 關於SQL Server,MySql,Oracle數據庫文件生成腳本,我放在XiaoCai.Database.rar
- 導入注意事項:數據庫命名為SecurityDB
- SQL Server:
- 主要有9張表:其中表T_AUTH_DEPT_ROLE,T_AUTH_DEPT_USER,T_AUTH_FUNCTION_ROLE,T_AUTH_FUNCTION_USER,T_AUTH_USER_ROLE相關ID都要設為欄位聯合組件,其他的表ID設為唯一主鍵。
- 在其他數據庫中,Oracle,MySql中同理,但略有些不同。
- 注:朋友反饋SQL Server腳本不全,上傳SQL Server數據庫文件
- http://files.cnblogs.com/aganqin/SecurityDB.rar
- http://files.cnblogs.com/aganqin/SecurityDBSQL.rar
- 數據庫腳本:
USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_DEPT] Script Date: 2013/10/21 10:51:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_DEPT]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [nvarchar](50) NOT NULL, [NOTE] [nvarchar](500) NULL, [CREATETIME] [datetime] NOT NULL, CONSTRAINT [PK_T_AUTH_DEPT] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_DEPT_ROLE] Script Date: 2013/10/21 11:08:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_DEPT_ROLE]( [DEPT_ID] [int] NOT NULL, [ROLE_ID] [int] NOT NULL, CONSTRAINT [PK_T_AUTH_DEPT_ROLE] PRIMARY KEY CLUSTERED ( [DEPT_ID] ASC, [ROLE_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_DEPT_USER] Script Date: 2013/10/21 11:08:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_DEPT_USER]( [DEPT_ID] [int] NOT NULL, [USER_ID] [int] NOT NULL, CONSTRAINT [PK_T_AUTH_DEPT_USER] PRIMARY KEY CLUSTERED ( [DEPT_ID] ASC, [USER_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_FUNCTION] Script Date: 2013/10/21 11:08:23 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_FUNCTION]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [nvarchar](50) NULL, [DESCRIPTION] [nvarchar](500) NULL, [PARENTFUNC_ID] [int] NULL, [CONTROL_ID] [nvarchar](255) NULL, [VERSION] [nvarchar](20) NULL, [ISEXPIRE] [int] NULL, [DIRECTORYNAME] [nvarchar](200) NULL, [SYSTEM_TYPE_ID] [nvarchar](255) NULL, [CREATETIME] [datetime] NOT NULL, CONSTRAINT [PK_T_AUTH_FUNCTION] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_FUNCTION_ROLE] Script Date: 2013/10/21 11:08:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_FUNCTION_ROLE]( [FUNCTION_ID] [int] NOT NULL, [ROLE_ID] [int] NOT NULL, CONSTRAINT [PK_T_AUTH_FUNCTION_ROLE] PRIMARY KEY CLUSTERED ( [FUNCTION_ID] ASC, [ROLE_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_FUNCTION_USER] Script Date: 2013/10/21 11:08:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_FUNCTION_USER]( [FUNCTION_ID] [int] NOT NULL, [USER_ID] [int] NOT NULL, CONSTRAINT [PK_T_AUTH_FUNCTION_USER] PRIMARY KEY CLUSTERED ( [FUNCTION_ID] ASC, [USER_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_ROLE] Script Date: 2013/10/21 11:09:06 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_ROLE]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [nvarchar](200) NOT NULL, [NOTE] [nvarchar](500) NULL, [CREATETIME] [datetime] NOT NULL, CONSTRAINT [PK_T_AUTH_ROLE] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_USER] Script Date: 2013/10/21 11:09:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_USER]( [ID] [int] IDENTITY(1,1) NOT NULL, [USERID] [nvarchar](255) NOT NULL, [PASSWORD] [nvarchar](255) NOT NULL, [NAME] [nvarchar](255) NOT NULL, [IDENTITYCARD] [nvarchar](255) NULL, [OFFICEPTELHONE] [nvarchar](255) NULL, [MOBILEPHONE] [nvarchar](255) NULL, [EMAIL] [nvarchar](255) NULL, [ADDRESS] [nvarchar](255) NULL, [POSITION] [nvarchar](255) NULL, [ISEXPIRE] [int] NULL, [CREATETIME] [datetime] NOT NULL, CONSTRAINT [PK_T_AUTH_USER] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO USE [SecurityDB] GO /****** Object: Table [dbo].[T_AUTH_USER_ROLE] Script Date: 2013/10/21 11:09:29 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_AUTH_USER_ROLE]( [USER_ID] [int] NOT NULL, [ROLE_ID] [int] NOT NULL, CONSTRAINT [PK_T_AUTH_USER_ROLE] PRIMARY KEY CLUSTERED ( [USER_ID] ASC, [ROLE_ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
源碼
-
小菜用戶權限管理軟件主源碼:XiaoCai.SecurityManager.rar
-
涉及相關和核心類庫:XiaoCai.Commlib.rar
-
把XiaoCai.Commlib.rar解壓縮引入XiaoCai.SecurityManger項目中即可。
- 核心類庫源碼:XiaoCai.Core.rar
盡管有很多不如意,但在開源分享過程中能學到一點東西,希望也對你有所幫助,謝謝!
致歉
可能我導出數據腳本有問題,造成很多想研究的朋友數據庫不成功,浪費大家時間,對IT人來說,浪費時間等於浪費金錢,生命啊,在此抱歉。
現在添加上生成表的數據庫腳本。