diff --git a/TBF/BenchControl/Elde/CoverTest/CoverTest.cs b/TBF/BenchControl/Elde/CoverTest/CoverTest.cs index 295e1a678..c1eab91e5 100644 --- a/TBF/BenchControl/Elde/CoverTest/CoverTest.cs +++ b/TBF/BenchControl/Elde/CoverTest/CoverTest.cs @@ -24,7 +24,7 @@ namespace TBF.BenchControl.Elde.CoverTest readonly ulong mask; /// derived from bitPosition in the constructor readonly ulong target; readonly string message; - readonly Users.Grp.GID bypassLevel; + readonly Users.Grp.GID[] bypassLevel; public CoverTest() { diff --git a/TBF/BenchControl/Elde/CoverTest/CoverTestCfg.cs b/TBF/BenchControl/Elde/CoverTest/CoverTestCfg.cs index 5ccc7f407..255e6213c 100644 --- a/TBF/BenchControl/Elde/CoverTest/CoverTestCfg.cs +++ b/TBF/BenchControl/Elde/CoverTest/CoverTestCfg.cs @@ -22,7 +22,7 @@ namespace TBF.BenchControl.Elde.CoverTest public int BitPosition; public bool Invert; public string Message; - public Users.Grp.GID BypassLevel; + public Users.Grp.GID[] BypassLevel; /// Private parameterless constructor invoked by all other (public) constructors CoverTestCfg() @@ -35,7 +35,7 @@ namespace TBF.BenchControl.Elde.CoverTest Invert = false; Message = Strings.Close_the_cover; - BypassLevel = Users.Grp.GID.TestingSpecialists; + BypassLevel = new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists }; } public CoverTestCfg(IComponentFactory factory) diff --git a/TBF/BenchControl/Elde/CoverTest/CoverTestCfgCtrl.cs b/TBF/BenchControl/Elde/CoverTest/CoverTestCfgCtrl.cs index ee1fd26b0..a2b0e99ac 100644 --- a/TBF/BenchControl/Elde/CoverTest/CoverTestCfgCtrl.cs +++ b/TBF/BenchControl/Elde/CoverTest/CoverTestCfgCtrl.cs @@ -68,7 +68,7 @@ namespace TBF.BenchControl.Elde.CoverTest bitPositionTextBox.Text = config.BitPosition.ToString(); invertCheckBox.Checked = config.Invert; messageTextBox.Text = config.Message; - bypassLevelComboBox.Text = config.BypassLevel.ToString(); + bypassLevelComboBox.Text = config.BypassLevel == null ? "---" : ((config.BypassLevel.Length > 0) ? config.BypassLevel[0].ToString() : "---"); } public void Unlock() @@ -93,11 +93,12 @@ namespace TBF.BenchControl.Elde.CoverTest config.Invert = invertCheckBox.Checked; config.Message = messageTextBox.Text; + config.BypassLevel = null; for (Users.Grp.GID gid = 0; gid < Users.Grp.GID.NrOfGroups; gid++) { if (bypassLevelComboBox.Text == gid.ToString()) { - config.BypassLevel = gid; + config.BypassLevel = new Users.Grp.GID[] { gid }; break; } } diff --git a/TBF/BenchControl/Elde/CoverTest/CoverTestForm.cs b/TBF/BenchControl/Elde/CoverTest/CoverTestForm.cs index 28aa287ca..2e157c518 100644 --- a/TBF/BenchControl/Elde/CoverTest/CoverTestForm.cs +++ b/TBF/BenchControl/Elde/CoverTest/CoverTestForm.cs @@ -18,9 +18,9 @@ namespace TBF.BenchControl.Elde.CoverTest public bool Completed { get { return completed; } } bool completed; - Users.Grp.GID bypassLevel; + Users.Grp.GID[] bypassLevel; - public CoverTestForm(string message, Users.Grp.GID bypassLevel, ILog bypassLog) + public CoverTestForm(string message, Users.Grp.GID[] bypassLevel, ILog bypassLog) { InitializeComponent(); ControlBox = false; diff --git a/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs b/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs index 44df9cddd..40290f9f6 100644 --- a/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs +++ b/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs @@ -46,7 +46,7 @@ namespace TBF.BenchControl.TestMethods.Endurance InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.Metrologists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = TBF.UiControls.SharedButtons.Buttons.Add | TBF.UiControls.SharedButtons.Buttons.Remove | TBF.UiControls.SharedButtons.Buttons.Up | diff --git a/TBF/ComponentParametersDlg.cs b/TBF/ComponentParametersDlg.cs index faa92e341..8067b7111 100644 --- a/TBF/ComponentParametersDlg.cs +++ b/TBF/ComponentParametersDlg.cs @@ -42,7 +42,7 @@ namespace TBF Flags = CfgUpdateFlags.None; /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = global::Users.Grp.GID.Metrologists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { global::Users.Grp.GID.Metrologists }; sharedButtons.MoreButtonTop = ComponentCfgCtrlHeight - 45; sharedButtons.OptionalButtons = SharedButtons.Buttons.None; sharedButtons.Unlocked += Unlock; diff --git a/TBF/ComponentsManagerDlg.cs b/TBF/ComponentsManagerDlg.cs index f9b96a800..23b8e84c0 100644 --- a/TBF/ComponentsManagerDlg.cs +++ b/TBF/ComponentsManagerDlg.cs @@ -69,7 +69,7 @@ namespace TBF selectComponentTypeDlg = new SelectComponentClassDlg(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.Administrators; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | diff --git a/TBF/Forms/ResultsArrangementDlg.cs b/TBF/Forms/ResultsArrangementDlg.cs index bd2dbbac7..058dfd4b1 100644 --- a/TBF/Forms/ResultsArrangementDlg.cs +++ b/TBF/Forms/ResultsArrangementDlg.cs @@ -15,7 +15,7 @@ namespace TBF.Forms /// /// Required access rights to make changes with this form /// - const Users.Grp.GID RequiredGroupMembership = Users.Grp.GID.Metrologists; + static readonly Users.Grp.GID[] RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists, Users.Grp.GID.Metrologists }; public bool Unlocked; /// true = changes enabled diff --git a/TBF/MainWnd.cs b/TBF/MainWnd.cs index fe1e61eed..d918b3b21 100644 --- a/TBF/MainWnd.cs +++ b/TBF/MainWnd.cs @@ -806,7 +806,13 @@ namespace TBF private void statusStrip1_DoubleClick(object sender, EventArgs e) { - if (new Users.Forms.LoginDlg(Users.Grp.GID.Testers).ShowDialog() == DialogResult.OK) +#if TURA_IPERL || TURA_SPECIAL + Users.Grp.GID[] reqGrpMembership = new Users.Grp.GID[] { Users.Grp.GID.Testers, Users.Grp.GID.TestingSpecialists, Users.Grp.GID.Metrologists, Users.Grp.GID.HeadOfLab }; +#else + Users.Grp.GID[] reqGrpMembership = null; +#endif + + if (new Users.Forms.LoginDlg(reqGrpMembership).ShowDialog() == DialogResult.OK) { UpdateUser(); } diff --git a/TBF/MetrologyDlg.cs b/TBF/MetrologyDlg.cs index a4ad8f387..66ecbb476 100644 --- a/TBF/MetrologyDlg.cs +++ b/TBF/MetrologyDlg.cs @@ -26,7 +26,7 @@ namespace TBF InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.Metrologists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove; sharedButtons.Unlocked += unlockButton_Click; sharedButtons.OKClicked += okButton_Click; diff --git a/TBF/PathsDlg.cs b/TBF/PathsDlg.cs index 770961d73..0f5ea33e4 100644 --- a/TBF/PathsDlg.cs +++ b/TBF/PathsDlg.cs @@ -51,7 +51,7 @@ namespace TBF InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.Metrologists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down; sharedButtons.Unlocked += Unlocked; diff --git a/TBF/ProcedureDlg.cs b/TBF/ProcedureDlg.cs index 92b0d9b30..a149c1daf 100644 --- a/TBF/ProcedureDlg.cs +++ b/TBF/ProcedureDlg.cs @@ -62,7 +62,7 @@ namespace TBF InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.TestingSpecialists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists, Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down; sharedButtons.Unlocked += Unlocked; @@ -102,7 +102,8 @@ namespace TBF this.usedNames = usedNames; - sharedButtons.RequiredGroupMembership = procedure.Protected ? Users.Grp.GID.Metrologists : Users.Grp.GID.TestingSpecialists; + sharedButtons.RequiredGroupMembership = procedure.Protected ? new Users.Grp.GID[] { Users.Grp.GID.Metrologists } + : new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists, Users.Grp.GID.Metrologists }; /// Prepare a list of components and a list of all valves in the test bench using (NHibernate.ISession session = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config)) diff --git a/TBF/ProceduresDlg.cs b/TBF/ProceduresDlg.cs index 30914fbfb..0652ca33b 100644 --- a/TBF/ProceduresDlg.cs +++ b/TBF/ProceduresDlg.cs @@ -26,7 +26,7 @@ namespace TBF InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.TestingSpecialists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists, Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down | SharedButtons.Buttons.Edit | SharedButtons.Buttons.Copy | diff --git a/TBF/Program.cs b/TBF/Program.cs index f22fe1cdd..a9f65d6dd 100644 --- a/TBF/Program.cs +++ b/TBF/Program.cs @@ -221,15 +221,22 @@ namespace TBF Users.Entities.User loadedUser = null; try { - bool authorized = false; +#if TURA_IPERL || TURA_SPECIAL + Grp.GID[] reqGrpMembership = new Grp.GID[] { Grp.GID.Testers, Grp.GID.TestingSpecialists, Grp.GID.Metrologists, Grp.GID.HeadOfLab }; +#else + Grp.GID[] reqGrpMembership = null; +#endif + bool authorized = false; Users.Entities.AuthorizedAs authorizedAs = Users.Entities.AuthorizedAs.PowerUser; if (Users.Entities.User.IsPowerUser(loginDlgBench.Alias, loginDlgBench.Password)) { loadedUser = new Users.Entities.User(loginDlgBench.Alias, 6, true); - authorized = loadedUser.Authorize(loginDlgBench.Alias, loginDlgBench.Password); - if (authorized) - GlobalData.AuthorizedAs = Users.Entities.AuthorizedAs.PowerUser; + authorized = loadedUser.Authorize(loginDlgBench.Alias, loginDlgBench.Password, reqGrpMembership); + if (authorized) + { + GlobalData.AuthorizedAs = Users.Entities.AuthorizedAs.PowerUser; + } } /// @@ -246,14 +253,10 @@ namespace TBF /// Load and authorise user from the UsersDB database try { - Grp.GID requiredGroupMembership = Grp.GID.None; -#if TURA_IPERL || TURA_SPECIAL - requiredGroupMembership = Grp.GID.Testers; -#endif if (loginDlgBench.Password == LoginDlgWithBenchSelection.UseTheTagPassword) { loadedUser = Users.Entities.User.LoadUserByTag(loginDlgBench.Alias, db); - if (loadedUser != null) authorized = loadedUser.AuthorizeTag(loginDlgBench.Alias, requiredGroupMembership); + if (loadedUser != null) authorized = loadedUser.AuthorizeTag(loginDlgBench.Alias, reqGrpMembership); } else { @@ -262,17 +265,17 @@ namespace TBF default: case Users.Entities.LoginMethod.UserName: loadedUser = Users.Entities.User.LoadUserByName(loginDlgBench.Alias, db); - if (loadedUser != null) authorized = loadedUser.Authorize(loginDlgBench.Alias, loginDlgBench.Password, requiredGroupMembership); + if (loadedUser != null) authorized = loadedUser.Authorize(loginDlgBench.Alias, loginDlgBench.Password, reqGrpMembership); break; case Users.Entities.LoginMethod.FullName: loadedUser = Users.Entities.User.LoadUserByFullName(loginDlgBench.Alias, db); - if (loadedUser != null) authorized = loadedUser.AuthorizeFullName(loginDlgBench.Alias, loginDlgBench.Password, requiredGroupMembership); + if (loadedUser != null) authorized = loadedUser.AuthorizeFullName(loginDlgBench.Alias, loginDlgBench.Password, reqGrpMembership); break; case Users.Entities.LoginMethod.Number: int number; if (!int.TryParse(loginDlgBench.Alias, out number)) break; loadedUser = Users.Entities.User.LoadUserByNumber(number, db); - if (loadedUser != null) authorized = loadedUser.AuthorizeNumber(number, loginDlgBench.Password, requiredGroupMembership); + if (loadedUser != null) authorized = loadedUser.AuthorizeNumber(number, loginDlgBench.Password, reqGrpMembership); break; } } diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 2e997d7e3..c9b35c5a5 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.1005.0")] -[assembly: AssemblyFileVersion("2.18.1005.0")] +[assembly: AssemblyVersion("2.18.1006.0")] +[assembly: AssemblyFileVersion("2.18.1006.0")] diff --git a/TBF/TransitionsDlg.cs b/TBF/TransitionsDlg.cs index 2f4dde8f6..c70623f4a 100644 --- a/TBF/TransitionsDlg.cs +++ b/TBF/TransitionsDlg.cs @@ -65,7 +65,7 @@ namespace TBF InitializeComponent(); /// SharedDlgButtons configuration - sharedButtons.RequiredGroupMembership = Users.Grp.GID.Metrologists; + sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down | SharedButtons.Buttons.NewTab | SharedButtons.Buttons.RenameTab | diff --git a/TBF/UiControls/BenchControlPanel.cs b/TBF/UiControls/BenchControlPanel.cs index eb9c36b75..e937ee569 100644 --- a/TBF/UiControls/BenchControlPanel.cs +++ b/TBF/UiControls/BenchControlPanel.cs @@ -252,7 +252,7 @@ namespace TBF.UiControls /// Prevent 'Stop draining' by password if (drain1Highlighted && !Users.GlobalData.CurrentUser.IsMemberOf(Users.Grp.GID.TestingSpecialists)) { - if ((new Users.Forms.LoginDlg(Users.Grp.GID.TestingSpecialists)).ShowDialog() != DialogResult.OK) + if ((new Users.Forms.LoginDlg(new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists })).ShowDialog() != DialogResult.OK) return; if (Program.MainWnd != null) Program.MainWnd.UpdateUser(); @@ -269,7 +269,7 @@ namespace TBF.UiControls /// Prevent 'Stop draining' by password if (drain1Highlighted && !Users.GlobalData.CurrentUser.IsMemberOf(Users.Grp.GID.TestingSpecialists)) { - if ((new Users.Forms.LoginDlg(Users.Grp.GID.TestingSpecialists)).ShowDialog() != DialogResult.OK) + if ((new Users.Forms.LoginDlg(new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists })).ShowDialog() != DialogResult.OK) return; if (Program.MainWnd != null) Program.MainWnd.UpdateUser(); @@ -286,7 +286,7 @@ namespace TBF.UiControls /// Prevent 'Stop draining' by password if (drain1Highlighted && !Users.GlobalData.CurrentUser.IsMemberOf(Users.Grp.GID.TestingSpecialists)) { - if ((new Users.Forms.LoginDlg(Users.Grp.GID.TestingSpecialists)).ShowDialog() != DialogResult.OK) + if ((new Users.Forms.LoginDlg(new Users.Grp.GID[] { Users.Grp.GID.TestingSpecialists })).ShowDialog() != DialogResult.OK) return; if (Program.MainWnd != null) Program.MainWnd.UpdateUser(); diff --git a/TBF/UiControls/SharedButtons.cs b/TBF/UiControls/SharedButtons.cs index 6cafd4d30..c6fbe7ffb 100644 --- a/TBF/UiControls/SharedButtons.cs +++ b/TBF/UiControls/SharedButtons.cs @@ -63,7 +63,7 @@ namespace TBF.UiControls Middle, } - public Users.Grp.GID RequiredGroupMembership; + public Users.Grp.GID[] RequiredGroupMembership; Users.Entities.User originalUser; @@ -76,7 +76,7 @@ namespace TBF.UiControls lockState = LockState.Locked; MoreActive = false; OptionalButtons = Buttons.None; - RequiredGroupMembership = Users.Grp.GID.None; + RequiredGroupMembership = null; InitializeComponent(); } diff --git a/Users/DB.cs b/Users/DB.cs index c855ce384..a889bb4a8 100644 --- a/Users/DB.cs +++ b/Users/DB.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2016-2017 Sensus Metering Systems +/// Copyright (c) 2016-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; diff --git a/Users/Entities/User.cs b/Users/Entities/User.cs index 012b71540..f9d97092e 100644 --- a/Users/Entities/User.cs +++ b/Users/Entities/User.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2016-2017 Sensus Metering Systems +/// Copyright (c) 2016-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -101,6 +101,38 @@ namespace Users.Entities } } + /// + /// Check whether user is a member of any of specified groups. + /// Returns true also when no groups are defined (groupIds = null). + /// + /// An array of group GID-s or null (no membership required) + /// true if user is a member of any of specified groups + public virtual bool IsMemberOf(Grp.GID[] groupIds) + { + if (groupIds == null || powerUser) + { + return true; + } + + foreach (var groupId in groupIds) + { + if (groupId >= 0 && (int)groupId < Grp.Count) + { + // for all group elements in User.groups + for (int i = 0; i < Groups.Count; ++i) + { + // element GID = parameter GroupId ? + if (((Group)Groups[i]).Gid == (int)groupId) + { + return true; + } + } + } + } + + return false; + } + /// /// Sets users password. It then will be encrypted. /// @@ -129,17 +161,17 @@ namespace Users.Entities /// - /// The FIRST of TWO possible user authorization method to be used - /// when a specific group membership is required (you can use Grp.GID.None). - /// If the user is not authorized, the current user remains to be a current user - /// (i.e. the access rights were not risen to a higher level). - /// If you require different behavior, use Unauthorize() before calling Authorize(). + /// Authorization method: 'requiredGroupMembership' contains a list of required groups. + /// Valid name and password and a mbership in any of theese goups grants access, Authorize(..) returns true. + /// When requiredGroupMembership == null, no membership is required, only name and password must be valid. + /// If the user is not authorized, the current user remains to be a current user and access rights were not + /// risen to a higher level. If you require different behavior, use Unauthorize() before calling Authorize(). /// /// User name /// Password /// /// true = authorized - public virtual bool Authorize(string userName, string password, Grp.GID requiredGroupMembership) + public virtual bool Authorize(string userName, string password, Grp.GID[] requiredGroupMembership) { if (IsPowerUser(userName, password)) { @@ -167,26 +199,17 @@ namespace Users.Entities } /// - /// The SECOND of TWO possible user authorization method to be used when - /// no specific group membership is required. - /// - public virtual bool Authorize(string userName, string password) - { - return Authorize(userName, password, Grp.GID.None); - } - - /// - /// The FIRST of TWO possible user authorization method to be used - /// when a specific group membership is required (you can use Grp.GID.None). - /// If the user is not authorized, the current user remains to be a current user - /// (i.e. the access rights were not risen to a higher level). - /// If you require different behavior, use Unauthorize() before calling Authorize(). - /// + /// Authorization method: 'requiredGroupMembership' contains a list of required groups. + /// Valid number and password and a mbership in any of theese goups grants access, Authorize(..) returns true. + /// When requiredGroupMembership == null, no membership is required, only number and password must be valid. + /// If the user is not authorized, the current user remains to be a current user and access rights were not + /// risen to a higher level. If you require different behavior, use Unauthorize() before calling Authorize(). + /// /// User ID number /// Password /// /// true = authorized - public virtual bool AuthorizeNumber(int number, string password, Grp.GID requiredGroupMembership) + public virtual bool AuthorizeNumber(int number, string password, Grp.GID[] requiredGroupMembership) { if (Number == number) { @@ -206,26 +229,17 @@ namespace Users.Entities } /// - /// The SECOND of TWO possible user authorization method to be used when - /// no specific group membership is required. - /// - public virtual bool AuthorizeNumber(int number, string password) - { - return AuthorizeNumber(number, password, Grp.GID.None); - } - - /// - /// The FIRST of TWO possible user authorization method to be used - /// when a specific group membership is required (you can use Grp.GID.None). - /// If the user is not authorized, the current user remains to be a current user - /// (i.e. the access rights were not risen to a higher level). - /// If you require different behavior, use Unauthorize() before calling Authorize(). - /// + /// Authorization method: 'requiredGroupMembership' contains a list of required groups. + /// Valid name and password and a mbership in any of theese goups grants access, Authorize(..) returns true. + /// When requiredGroupMembership == null, no membership is required, only name and password must be valid. + /// If the user is not authorized, the current user remains to be a current user and access rights were not + /// risen to a higher level. If you require different behavior, use Unauthorize() before calling Authorize(). + /// /// /// /// /// true = authorized - public virtual bool AuthorizeFullName(string fullName, string password, Grp.GID requiredGroupMembership) + public virtual bool AuthorizeFullName(string fullName, string password, Grp.GID[] requiredGroupMembership) { if (FullName.ToLower() == fullName.ToLower()) { @@ -244,26 +258,17 @@ namespace Users.Entities return false; } - /// - /// The SECOND of TWO possible user authorization method to be used when - /// no specific group membership is required. - /// - public virtual bool AuthorizeFullName(string fullName, string password) - { - return AuthorizeFullName(fullName, password, Grp.GID.None); - } - /// - /// The FIRST of TWO possible user authorization method to be used - /// when a specific group membership is required (you can use Grp.GID.None). - /// If the user is not authorized, the current user remains to be a current user - /// (i.e. the access rights were not risen to a higher level). - /// If you require different behavior, use Unauthorize() before calling Authorize(). + /// Authorization method: 'requiredGroupMembership' contains a list of required groups. + /// Valid TAG and a mbership in any of theese goups grants access, Authorize(..) returns true. + /// When requiredGroupMembership == null, no membership is required, only the TAG must be valid. + /// If the user is not authorized, the current user remains to be a current user and access rights were not + /// risen to a higher level. If you require different behavior, use Unauthorize() before calling Authorize(). /// /// Tag (RFID, NFC, ... s/n) /// /// true = authorized - public virtual bool AuthorizeTag(string tag, Grp.GID requiredGroupMembership) + public virtual bool AuthorizeTag(string tag, Grp.GID[] requiredGroupMembership) { if (Tag == tag) { @@ -282,16 +287,6 @@ namespace Users.Entities return false; } - /// - /// The SECOND of TWO possible user authorization method to be used when - /// no specific group membership is required. - /// - public virtual bool AuthorizeTag(string tag) - { - return AuthorizeTag(tag, Grp.GID.None); - } - - /// /// Returns a 'User' with a given username from a database. /// diff --git a/Users/Forms/LoginDlg.cs b/Users/Forms/LoginDlg.cs index f9b451e56..0936f7e58 100644 --- a/Users/Forms/LoginDlg.cs +++ b/Users/Forms/LoginDlg.cs @@ -18,8 +18,9 @@ namespace Users.Forms // Private fields string user; string password; - Grp.GID requiredGroupMembership = Grp.GID.Invalid; + Grp.GID[] requiredGroupMembership; bool noDatabase; + Color oriBackColor; /// Smart card support, card S/N is used as user.Tag GemCard.CardNative card; @@ -35,6 +36,8 @@ namespace Users.Forms public LoginDlg() { InitializeComponent(); + + oriBackColor = BackColor; } /// @@ -59,16 +62,21 @@ namespace Users.Forms /// /// Constructor when a specific group membership is required. /// - public LoginDlg(Grp.GID requiredGroupMembership) + public LoginDlg(Grp.GID[] requiredGroupMembership) : this() { this.requiredGroupMembership = requiredGroupMembership; +#if DEBUG + user = "MHA"; + userNameTextBox.Text = "MHA"; + passwordTextBox.Text = "kremik"; +#endif } /// /// Constructor with a predefined user when a specific group membership is required. /// - public LoginDlg(string predefinedUser, Grp.GID requiredGroupMembership) + public LoginDlg(string predefinedUser, Grp.GID[] requiredGroupMembership) : this() { user = predefinedUser; @@ -85,6 +93,9 @@ namespace Users.Forms else passwordTextBox.Select(); + /// + /// Smart card reader detection + /// smartCardReader = null; /// null = No smart card reader detected #if TURA_IPERL || TURA_SPECIAL @@ -183,15 +194,15 @@ namespace Users.Forms { default: case Entities.LoginMethod.UserName: - authorized = (requiredGroupMembership == Grp.GID.Invalid) ? loadedUser.Authorize(user, password) : loadedUser.Authorize(user, password, requiredGroupMembership); + authorized = loadedUser.Authorize(user, password, requiredGroupMembership); break; case Entities.LoginMethod.FullName: - authorized = (requiredGroupMembership == Grp.GID.Invalid) ? loadedUser.AuthorizeFullName(user, password) : loadedUser.AuthorizeFullName(user, password, requiredGroupMembership); + authorized = loadedUser.AuthorizeFullName(user, password, requiredGroupMembership); break; case Entities.LoginMethod.Number: int number; if (!int.TryParse(user, out number)) break; - authorized = (requiredGroupMembership == Grp.GID.Invalid) ? loadedUser.AuthorizeNumber(number, password) : loadedUser.AuthorizeNumber(number, password, requiredGroupMembership); + authorized = loadedUser.AuthorizeNumber(number, password, requiredGroupMembership); break; } } @@ -222,7 +233,7 @@ namespace Users.Forms /// private void cancelButton_Click(object sender, EventArgs e) { - if (requiredGroupMembership == Grp.GID.Invalid) + if (requiredGroupMembership == null) { Entities.User.Unauthorize(); } @@ -278,7 +289,7 @@ namespace Users.Forms Users.Entities.User loadedUser = Users.Entities.User.LoadUserByTag(tag, db); if (loadedUser != null) { - authorized = (requiredGroupMembership == Grp.GID.Invalid) ? loadedUser.AuthorizeTag(tag) : loadedUser.AuthorizeTag(tag, requiredGroupMembership); + authorized = loadedUser.AuthorizeTag(tag, requiredGroupMembership); } } catch (Exception) { } @@ -304,7 +315,7 @@ namespace Users.Forms void OnCardRemoved(object sender, CardRemovedEventArgs args) { - BackColor = SystemColors.Control; + BackColor = oriBackColor; } private void LoginDlg_FormClosing(object sender, FormClosingEventArgs e) diff --git a/Users/Properties/AssemblyInfo.cs b/Users/Properties/AssemblyInfo.cs index 518c3f8ba..e57c62fc7 100644 --- a/Users/Properties/AssemblyInfo.cs +++ b/Users/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.18.982.0")] -[assembly: AssemblyFileVersion("2.18.982.0")] +[assembly: AssemblyVersion("2.18.1006.0")] +[assembly: AssemblyFileVersion("2.18.1006.0")]