Winform开发框架之系统登录实现

开发 后端
自动登录(其实是接受通过命令行参数进行登录)也是很常见的,有时候,让客户端记住用户的账号密码,我们在后台通过调动命令行方式进行登录,让系统程序接收到相关的参数值即可进行登录了。

在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行系统维护管理。这种重新登录其实也是一种友好的操作之一,试想一下,换个账号登录,就需要推出系统,重新寻找运行程序才可以,而且如果系统启动较慢一点的,还需要等待,所以实现重新登录,有时候也是必要的。因此实现这个功能,也是体现我们开发的系统注重细节的表现。

另外,自动登录(其实是接受通过命令行参数进行登录)也是很常见的,有时候,让客户端记住用户的账号密码,我们在后台通过调动命令行方式进行登录,让系统程序接收到相关的参数值即可进行登录了。

1、系统重新登录实现

大致的思路,就是登录系统后,在系统菜单中有一项重新登录的功能入口,单击可以要求客户重新输入密码进行登录,如下所示。

代码实现就是通过把初始化的时候,用户相关的操作放到一个函数里面,保证重新执行这个函数操作就能重新刷新登录用户信息即可。如下所示。

在InitUserRelated函数里面,我们把用户相关的初始化操作放在里面,其中包括显示登录用户信息、用户可操作按钮或者菜单、首页信息等相关项目,代码如下所示。

  1. /// <summary>  
  2. /// 初始化用户相关的系统信息  
  3. /// </summary>  
  4. private void InitUserRelated()  
  5. {  
  6.     ChildWinManagement.LoadMdiForm(thistypeof(FirstPage));//欢迎页面  
  7.  
  8.     #region 初始化系统名称  
  9.     try 
  10.     {  
  11.         string Manufacturer = config.AppConfigGet("Manufacturer");  
  12.         string ApplicationName = config.AppConfigGet("ApplicationName");  
  13.         string AppWholeName = string.Format("{0}-{1}    ", Manufacturer, ApplicationName);  
  14.         Portal.gc.gAppUnit = Manufacturer;  
  15.         Portal.gc.gAppMsgboxTitle = AppWholeName;  
  16.         Portal.gc.gAppWholeName = AppWholeName;  
  17.  
  18.         this.Text = AppWholeName + "      ";  
  19.         this.notifyIcon1.BalloonTipText = AppWholeName;  
  20.         this.notifyIcon1.BalloonTipTitle = AppWholeName;  
  21.         this.notifyIcon1.Text = AppWholeName;  
  22.  
  23.         string userName = Portal.gc.LoginInfo.RealName;  
  24.         if (string.IsNullOrEmpty(userName))  
  25.         {  
  26.             userName = Portal.gc.LoginInfo.Name;  
  27.         }  
  28.         UserStatus = string.Format("当前用户:{0}({1})", userName, Portal.gc.RoleInfo.RoleName);  
  29.         CommandStatus = string.Format("欢迎使用 {0}", Portal.gc.gAppWholeName);  
  30.     }  
  31.     catch { }  
  32.  
  33.     #endregion  
  34.  
  35.     InitAuthorizedUI();//根据权限屏蔽  
  36.  
  37.     InitSkinGallery();  
  38.     UserLookAndFeel.Default.SetSkinStyle("Office 2010 Blue");  

其中InitAuthorizedUI就是判断用户有哪些权限的函数,根据权限系统获取到的功能点,在这里对界面元素进行重新刷新,有权限的就显示,没有的就隐藏即可,如下所示。

  1. /// <summary>  
  2. /// 根据权限屏蔽功能  
  3. /// </summary>  
  4. private void InitAuthorizedUI()  
  5. {  
  6.     this.tool_Report.Enabled = Portal.gc.HasFunction("Report");  
  7.     this.tool_Dict.Enabled = Portal.gc.HasFunction("Dictionary");  
  8.     this.tool_ItemDetail.Enabled = Portal.gc.HasFunction("ItemDetail");  
  9.     this.tool_Purchase.Enabled = Portal.gc.HasFunction("Purchase");  
  10.     this.tool_StockSearch.Enabled = Portal.gc.HasFunction("StockSearch");  
  11.     this.tool_TakeOut.Enabled = Portal.gc.HasFunction("TakeOut");  
  12.     this.tool_WareHouse.Enabled = Portal.gc.HasFunction("WareHouse");  
  13.     //this.menu_run_systemLog.Enabled = Portal.gc.HasFunction("LoginLog");  
  14.     this.tool_Settings.Enabled = Portal.gc.HasFunction("Parameters");  
  15.     this.tool_MonthlyStatistic.Enabled = Portal.gc.HasFunction("MonthlyStatistic");  
  16.     this.tool_AnnualStatistic.Enabled = Portal.gc.HasFunction("AnnualStatistic");  
  17.     this.tool_ClearAll.Enabled = Portal.gc.HasFunction("ClearAllData");  
  18.     this.tool_ImportItemDetail.Enabled = Portal.gc.HasFunction("ImportItemDetail");  

这样封装好后,我们需要重新登录就方便了,我们在重新登录的菜单操作里面,实现代码如下所示。

  1. private void btnRelogin_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)  
  2. {  
  3.     if (MessageDxUtil.ShowYesNoAndWarning("您确定需要重新登录吗?") != DialogResult.Yes)  
  4.         return;  
  5.  
  6.  
  7.     Portal.gc.MainDialog.Hide();  
  8.  
  9.     Login dlg = new Login();  
  10.     dlg.StartPosition = FormStartPosition.CenterScreen;  
  11.     if (DialogResult.OK == dlg.ShowDialog())  
  12.     {  
  13.         if (dlg.bLogin)  
  14.         {  
  15.             CloseAllDocuments();  
  16.             InitUserRelated();  
  17.         }  
  18.  
  19.     }  
  20.     dlg.Dispose();  
  21.     Portal.gc.MainDialog.Show();  

实现上面的操作过程,基本上就完成了重新登录的操作了。

2、系统自动登录实现

系统自动登录有时候很必要,在用户自己绝对信任的电脑上,自动登录对用户来说,很方便友好的,君不见,QQ如此、旺旺如此等等。其实实现思路就是通过给exe执行文件传递登录参数即可,必要时登录的参数值还可以进行加密,给第三方进行运行调用,以前就做过一个在Web上自动启动桌面程序Visio应用软件的操作,其实原理就是一样,通过传递参数给执行文件实现的。

  1. [STAThread]  
  2. static void Main(string[] args)  
  3. {  
  4.     Application.EnableVisualStyles();  
  5.     Application.SetCompatibleTextRenderingDefault(false);  
  6.  
  7.     if (args.Length > 0)  
  8.     {  
  9.         LoginByArgs(args);  
  10.     }  
  11.     else 
  12.     {  
  13.         LoginNormal(args);  
  14.     }  
  1. /// <summary>  
  2.         /// 使用参数化登录  
  3.         /// </summary>  
  4.         /// <param name="args"></param>  
  5.         private static void LoginByArgs(string[] args)  
  6.         {  
  7.             CommandArgs commandArgs = CommandLine.Parse(args);  
  8.             if (commandArgs.ArgPairs.Count > 0)  
  9.             {  
  10.                 #region 获取用户参数  
  11.                 string userName = string.Empty;  
  12.                 string identity = string.Empty;  
  13.                 foreach (KeyValuePair<stringstring> pair in commandArgs.ArgPairs)  
  14.                 {  
  15.                     if ("U".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))  
  16.                     {  
  17.                         userName = pair.Value;  
  18.                     }  
  19.                     if ("P".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))  
  20.                     {  
  21.                         identity = pair.Value;  
  22.                     }  
  23.                 }   
  24.                 #endregion  
  25.  
  26.                 if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(identity))  
  27.                 {  
  28.                     bool bLogin = Portal.gc.LoginByIdentity(userName.Trim(), identity);  
  29.                     if (bLogin)  
  30.                     {  
  31.                         ShowMainDialog();  
  32.                     }  
  33.                     else 
  34.                     {  
  35.                         LoginNormal(args);  
  36.                     }  
  37.                 }  
  38.             }  
  39.         } 

有时候,即使觉得用户不需要通过命令行登录,那么我们自己为了避免开发过程中,启动程序时候,总是需要输入用户账号密码的问题,也可以使用模拟自动登录的方式解决。

我们只需要在项目的属性里面输入内置的用户名密码,这样我们测试起来就不用登录那么麻烦了。

以上就是Winform开发框架中对于系统重新登录以及系统自动登录(命令行登录)的思想思路及方式,欢迎大家提供更好的思路及技巧,或者进行探讨,谢谢支持。

原文链接:http://www.cnblogs.com/wuhuacong/archive/2012/08/21/2648339.html

责任编辑:张伟 来源: 伍华聪的博客
相关推荐

2013-04-23 09:31:12

Winform开发框架

2012-12-11 10:15:02

Winform开发框架

2011-11-23 09:47:36

Winform

2012-11-20 10:04:46

Winform开发

2011-11-14 10:41:15

Winform数据管理模块Items

2012-07-30 09:32:00

Web

2024-03-05 10:39:42

2016-03-23 11:05:58

Socket开发框架分析

2009-10-13 11:32:19

Winform假框架

2009-08-20 10:24:52

C#开发WinForm

2009-08-20 09:30:03

C#开发WinForm

2012-10-12 10:30:37

PHPOauth

2009-07-07 15:53:02

JDK日志

2012-09-10 10:00:02

2011-04-22 10:45:14

SimpleFrame

2019-10-18 16:05:32

框架开发Java

2010-09-25 13:09:39

UISymbian

2009-11-05 09:01:41

WinForm

2014-07-10 10:02:01

iOSHome Kit框架

2020-10-23 09:47:19

HarmonyOSJS开发框架
点赞
收藏

51CTO技术栈公众号