From a4737b8b1fdc7efb1426144cb36e08025814d1d6 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 17 Apr 2023 08:25:48 +0200 Subject: [PATCH] started on user role assignments --- src/RoleEditor/MainWindow.xaml.cs | 18 ++++++-- src/brecal.model/RoleAssignment.cs | 69 +++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/RoleEditor/MainWindow.xaml.cs b/src/RoleEditor/MainWindow.xaml.cs index 97801ff..2d6fe28 100644 --- a/src/RoleEditor/MainWindow.xaml.cs +++ b/src/RoleEditor/MainWindow.xaml.cs @@ -34,8 +34,8 @@ namespace RoleEditor private readonly ObservableCollection _roles = new ObservableCollection(); private readonly ObservableCollection _securables = new ObservableCollection(); private readonly ObservableCollection _users = new ObservableCollection(); - private readonly ObservableCollection _assignedRoles = new ObservableCollection(); - private readonly ObservableCollection _assignedSecurables = new ObservableCollection(); + private readonly ObservableCollection _assignedRoles = new ObservableCollection(); + private readonly ObservableCollection _assignedSecurables = new ObservableCollection(); private DBManager _dbManager; #endregion @@ -202,7 +202,7 @@ namespace RoleEditor this.textBoxRoleDescription.Text = (r != null) ? r.Description : string.Empty; } - private void listBoxUser_SelectionChanged(object sender, SelectionChangedEventArgs e) + private async void listBoxUser_SelectionChanged(object sender, SelectionChangedEventArgs e) { User? u = this.listBoxUser.SelectedItem as User; this.textBoxUserFirstName.Text = (u != null) ? u.Firstname : string.Empty; @@ -212,6 +212,18 @@ namespace RoleEditor this.textBoxUserCreated.Text = (u != null) ? u.Created.ToString() : string.Empty; this.textBoxUserModified.Text = (u != null) ? u.Modified.ToString() : string.Empty; this.textBoxUserPassword.Text = string.Empty; + + // load roles assigned to user + _assignedRoles.Clear(); + foreach (RoleAssignment ra in await RoleAssignment.LoadForUser(u, _dbManager)) + { + foreach(Role r in this._roles) + { + if (ra.RoleId == r.Id) + ra.AssignedRole = r; + _assignedRoles.Add(ra); + } + } } private void listBoxSecurables_SelectionChanged(object sender, SelectionChangedEventArgs e) diff --git a/src/brecal.model/RoleAssignment.cs b/src/brecal.model/RoleAssignment.cs index 489df60..10b2f6c 100644 --- a/src/brecal.model/RoleAssignment.cs +++ b/src/brecal.model/RoleAssignment.cs @@ -12,12 +12,60 @@ namespace brecal.model #region Properties + public int? UserId { get; set; } + + public int? RoleId { get; set; } + public Role? AssignedRole { get; set; } public User? AssignedUser { get; set; } #endregion + #region public static methods + + public static async Task> LoadForUser(User? u, IDBManager manager) + { + List loadResultList = await manager.Load(SetLoadQuery, LoadElems, args: u); + List result = new(); + foreach (RoleAssignment ra in loadResultList.Cast()) + { + ra.AssignedUser = u; + result.Add(ra); + } + + return result; + } + + public static void SetLoadQuery(IDbCommand cmd, params object[] args) + { + cmd.CommandText = "SELECT id, user_id, role_id FROM user_role_map WHERE user_id = @UID"; + if (args.Length != 1 || !(args[0] is User)) + throw new ArgumentException("loader needs single user as argument"); + IDataParameter uid = cmd.CreateParameter(); + uid.ParameterName = "UID"; + uid.Value = ((User)args[0]).Id; + cmd.Parameters.Add(uid); + } + + public static List LoadElems(IDataReader reader) + { + List result = new List(); + while (reader.Read()) + { + RoleAssignment ra = new(); + ra.Id = (uint)reader.GetInt32(0); + if (!reader.IsDBNull(1)) ra.UserId = reader.GetInt32(1); + if (!reader.IsDBNull(2)) ra.RoleId = reader.GetInt32(2); + result.Add(ra); + } + return result; + } + + #endregion + + #region overrides + public override void SetUpdate(IDbCommand cmd) { throw new NotImplementedException(); @@ -30,8 +78,27 @@ namespace brecal.model public override void SetDelete(IDbCommand cmd) { - throw new NotImplementedException(); + cmd.CommandText = "DELETE FROM user_role_map WHERE id = @ID"; + + IDataParameter idParam = cmd.CreateParameter(); + idParam.ParameterName = "ID"; + idParam.Value = this.Id; + cmd.Parameters.Add(idParam); } + public override string ToString() + { + if (this.AssignedRole == null) + { + return $"{Id}: "; + } + else + { + return $"{AssignedRole.Name}:{Id}"; + } + } + + #endregion + } }