Winform開發架構之系統登入實現

來源:互聯網
上載者:User

在業務系統的操作過程中,有時候,使用者需要切換使用者進行重新登入,這種情況有時候是因為一個人管理多個使用者帳號,希望通過不同的帳號登入進行管理不同的資料,另一種情況是酒店的換班操作,另一個人接替前面的人進行系統維護管理。這種重新登入其實也是一種友好的操作之一,試想一下,換個帳號登入,就需要推出系統,重新尋找運行程式才可以,而且如果系統啟動較慢一點的,還需要等待,所以實現重新登入,有時候也是必要的。因此實現這個功能,也是體現我們開發的系統注重細節的表現。

另外,自動登入(其實是接受通過命令列參數進行登入)也是很常見的,有時候,讓用戶端記住使用者的帳號密碼,我們在後台通過調動命令列方式進行登入,讓系統程式接收到相關的參數值即可進行登入了。

1、系統重新登入實現

大致的思路,就是登入系統後,在系統功能表中有一項重新登入的功能入口,單擊可以要求客戶重新輸入密碼進行登入,如下所示。

代碼實現就是通過把初始化的時候,使用者相關的操作放到一個函數裡面,保證重新執行這個函數操作就能重新重新整理登入使用者資訊即可。如下所示。


在InitUserRelated函數裡面,我們把使用者相關的初始化操作放在裡面,其中包括顯示登入使用者資訊、使用者可操作按鈕或者菜單、首頁資訊等相關項目,代碼如下所示。

/// <summary>  /// 初始化使用者相關的系統資訊  /// </summary>  private void InitUserRelated()  {      ChildWinManagement.LoadMdiForm(this, typeof(FirstPage));//歡迎頁面       #region 初始化系統名稱      try     {          string Manufacturer = config.AppConfigGet("Manufacturer");          string ApplicationName = config.AppConfigGet("ApplicationName");          string AppWholeName = string.Format("{0}-{1}    ", Manufacturer, ApplicationName);          Portal.gc.gAppUnit = Manufacturer;          Portal.gc.gAppMsgboxTitle = AppWholeName;          Portal.gc.gAppWholeName = AppWholeName;           this.Text = AppWholeName + "      ";          this.notifyIcon1.BalloonTipText = AppWholeName;          this.notifyIcon1.BalloonTipTitle = AppWholeName;          this.notifyIcon1.Text = AppWholeName;           string userName = Portal.gc.LoginInfo.RealName;          if (string.IsNullOrEmpty(userName))          {              userName = Portal.gc.LoginInfo.Name;          }          UserStatus = string.Format("目前使用者:{0}({1})", userName, Portal.gc.RoleInfo.RoleName);          CommandStatus = string.Format("歡迎使用 {0}", Portal.gc.gAppWholeName);      }      catch { }       #endregion       InitAuthorizedUI();//根據許可權屏蔽       InitSkinGallery();      UserLookAndFeel.Default.SetSkinStyle("Office 2010 Blue");  } 

其中InitAuthorizedUI就是判斷使用者有哪些許可權的函數,根據許可權系統擷取到的功能點,在這裡對介面元素進行重新重新整理,有許可權的就顯示,沒有的就隱藏即可,如下所示。

/// <summary>  /// 根據許可權屏蔽功能  /// </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.tool_WareHouse.Enabled = Portal.gc.HasFunction("WareHouse");      //this.menu_run_systemLog.Enabled = Portal.gc.HasFunction("LoginLog");      this.tool_Settings.Enabled = Portal.gc.HasFunction("Parameters");      this.tool_MonthlyStatistic.Enabled = Portal.gc.HasFunction("MonthlyStatistic");      this.tool_AnnualStatistic.Enabled = Portal.gc.HasFunction("AnnualStatistic");      this.tool_ClearAll.Enabled = Portal.gc.HasFunction("ClearAllData");      this.tool_ImportItemDetail.Enabled = Portal.gc.HasFunction("ImportItemDetail");  } 

這樣封裝好後,我們需要重新登入就方便了,我們在重新登入的菜單操作裡面,實現代碼如下所示。

private void btnRelogin_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)  {      if (MessageDxUtil.ShowYesNoAndWarning("您確定需要重新登入嗎?") != DialogResult.Yes)          return;        Portal.gc.MainDialog.Hide();       Login dlg = new Login();      dlg.StartPosition = FormStartPosition.CenterScreen;      if (DialogResult.OK == dlg.ShowDialog())      {          if (dlg.bLogin)          {              CloseAllDocuments();              InitUserRelated();          }       }      dlg.Dispose();      Portal.gc.MainDialog.Show();  } 

實現上面的操作過程,基本上就完成了重新登入的操作了。

2、系統自動登入實現

系統自動登入有時候很必要,在使用者自己絕對信任的電腦上,自動登入對使用者來說,很方便友好的,君不見,QQ如此、WangWang如此等等。其實實現思路就是通過給exe執行檔案傳遞登入參數即可,必要時登入的參數值還可以進行加密,給第三方進行運行調用,以前就做過一個在Web上自動啟動傳統型程式Visio應用軟體的操作,其實原理就是一樣,通過傳遞參數給執行檔案實現的。

[STAThread]  static void Main(string[] args)  {      Application.EnableVisualStyles();      Application.SetCompatibleTextRenderingDefault(false);       if (args.Length > 0)      {          LoginByArgs(args);      }      else     {          LoginNormal(args);      }  } /// <summary>          /// 使用參數化登入          /// </summary>          /// <param name="args"></param>          private static void LoginByArgs(string[] args)          {              CommandArgs commandArgs = CommandLine.Parse(args);              if (commandArgs.ArgPairs.Count > 0)              {                  #region 擷取使用者參數                  string userName = string.Empty;                  string identity = string.Empty;                  foreach (KeyValuePair<string, string> pair in commandArgs.ArgPairs)                  {                      if ("U".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))                      {                          userName = pair.Value;                      }                      if ("P".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))                      {                          identity = pair.Value;                      }                  }                   #endregion                   if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(identity))                  {                      bool bLogin = Portal.gc.LoginByIdentity(userName.Trim(), identity);                      if (bLogin)                      {                          ShowMainDialog();                      }                      else                     {                          LoginNormal(args);                      }                  }              }          } 

有時候,即使覺得使用者不需要通過命令列登入,那麼我們自己為了避免開發過程中,啟動程式時候,總是需要輸入使用者帳號密碼的問題,也可以使用類比自動登入的方式解決。

我們只需要在項目的屬性裡面輸入內建的使用者名稱密碼,這樣我們測試起來就不用登入那麼麻煩了。


以上就是Winform開發架構中對於系統重新登入以及系統自動登入(命令列登入)的思想思路及方式,歡迎大家提供更好的思路及技巧,或者進行探討,謝謝支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.