diff --git a/misc/create_schema.sql b/misc/create_schema.sql
index e8e7676..41b4378 100644
--- a/misc/create_schema.sql
+++ b/misc/create_schema.sql
@@ -216,7 +216,7 @@ ENGINE=InnoDB
;
CREATE TABLE `role_securable_map` (
- `id` INT(10) UNSIGNED NOT NULL,
+ `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`role_id` INT(10) UNSIGNED NOT NULL,
`securable_id` INT(10) UNSIGNED NOT NULL,
`created` DATETIME NULL DEFAULT current_timestamp(),
diff --git a/src/RoleEditor/MainWindow.xaml.cs b/src/RoleEditor/MainWindow.xaml.cs
index 9e720c0..ea7d758 100644
--- a/src/RoleEditor/MainWindow.xaml.cs
+++ b/src/RoleEditor/MainWindow.xaml.cs
@@ -72,7 +72,7 @@ namespace RoleEditor
#region button callbacks
- private void buttonParticipantSave_Click(object sender, RoutedEventArgs e)
+ private async void buttonParticipantSave_Click(object sender, RoutedEventArgs e)
{
Participant? p = this.listBoxParticipant.SelectedItem as Participant;
if (p != null)
@@ -81,14 +81,14 @@ namespace RoleEditor
p.Street = this.textBoxParticipantStreet.Text.Trim();
p.PostalCode = this.textBoxParticipantPostalCode.Text.Trim();
p.City = this.textBoxParticipantCity.Text.Trim();
- p.Save(_dbManager);
+ await p.Save(_dbManager);
this.listBoxParticipant.ItemsSource = null;
this.listBoxParticipant.ItemsSource = _users;
this.listBoxParticipant.SelectedItem = p;
}
}
- private void buttonUserSave_Click(object sender, RoutedEventArgs e)
+ private async void buttonUserSave_Click(object sender, RoutedEventArgs e)
{
User? u = this.listBoxUser.SelectedItem as User;
if(u != null)
@@ -107,14 +107,14 @@ namespace RoleEditor
u.PasswordHash = hashedInputStringBuilder.ToString();
}
u.APIKey = this.textBoxUserAPIKey.Text.Trim();
- u.Save(_dbManager);
+ await u.Save(_dbManager);
this.listBoxUser.ItemsSource = null;
this.listBoxUser.ItemsSource = _users;
this.listBoxUser.SelectedItem = u;
}
}
- private void buttonAddRole_Click(object sender, RoutedEventArgs e)
+ private async void buttonAddRole_Click(object sender, RoutedEventArgs e)
{
Role? r = this.listBoxRoles.SelectedItem as Role;
User? u = this.listBoxUser.SelectedItem as User;
@@ -138,61 +138,84 @@ namespace RoleEditor
ra.RoleId = (int) r.Id;
ra.AssignedRole = r;
ra.AssignedUser = u;
- ra.Save(_dbManager);
+ await ra.Save(_dbManager);
_assignedRoles.Add(ra);
}
}
}
- private void buttonRemoveRole_Click(object sender, RoutedEventArgs e)
+ private async void buttonRemoveRole_Click(object sender, RoutedEventArgs e)
{
// remove role from user
RoleAssignment? ra = this.listBoxUserRoles.SelectedItem as RoleAssignment;
if(ra != null)
{
- ra.Delete(_dbManager);
+ await ra.Delete(_dbManager);
if(_assignedRoles.Contains(ra))
_assignedRoles.Remove(ra);
}
}
- private void buttonAddSecurable_Click(object sender, RoutedEventArgs e)
+ private async void buttonAddSecurable_Click(object sender, RoutedEventArgs e)
{
+ if ((this.listBoxRoles.SelectedItem is Role r) && (this.listBoxSecurables.SelectedItem is Securable s))
+ {
+ // test if assignment is already present
+ bool foundMatchingAssignment = false;
+ foreach (SecurableAssignment sa in _assignedSecurables)
+ {
+ if ((sa.SecurableId == s.Id) && (sa.RoleId == r.Id))
+ {
+ foundMatchingAssignment = true;
+ break;
+ }
+ }
+ if (!foundMatchingAssignment)
+ {
+ SecurableAssignment sa = new SecurableAssignment();
+ sa.SecurableId = (int)s.Id;
+ sa.RoleId = (int)r.Id;
+ sa.AssignedRole = r;
+ sa.AssignedSecurable = s;
+ await sa.Save(_dbManager);
+ _assignedSecurables.Add(sa);
+ }
+ }
}
- private void buttonRemoveSecurable_Click(object sender, RoutedEventArgs e)
+ private async void buttonRemoveSecurable_Click(object sender, RoutedEventArgs e)
{
SecurableAssignment? sa = this.listBoxRoleSecurables.SelectedItem as SecurableAssignment;
if(sa != null)
{
- sa.Delete(_dbManager);
+ await sa.Delete(_dbManager);
if (_assignedSecurables.Contains(sa))
_assignedSecurables.Remove(sa);
}
}
- private void buttonSaveSecurable_Click(object sender, RoutedEventArgs e)
+ private async void buttonSaveSecurable_Click(object sender, RoutedEventArgs e)
{
Securable? s = this.listBoxSecurables.SelectedItem as Securable;
if(s != null)
{
s.Name = this.textBoxSecurableName.Text.Trim();
- s.Save(_dbManager);
+ await s.Save(_dbManager);
this.listBoxSecurables.ItemsSource = null;
this.listBoxSecurables.ItemsSource = _securables;
this.listBoxSecurables.SelectedItem = s;
}
}
- private void buttonSaveRole_Click(object sender, RoutedEventArgs e)
+ private async void buttonSaveRole_Click(object sender, RoutedEventArgs e)
{
Role? r = this.listBoxRoles.SelectedItem as Role;
if(r != null)
{
r.Name = this.textBoxRoleName.Text.Trim();
r.Description = this.textBoxRoleDescription.Text.Trim();
- r.Save(_dbManager);
+ await r.Save(_dbManager);
this.listBoxRoles.ItemsSource = null;
this.listBoxRoles.ItemsSource = _roles;
this.listBoxRoles.SelectedItem = r;
@@ -236,9 +259,12 @@ namespace RoleEditor
foreach (Securable s in this._securables)
{
if (sa.SecurableId == s.Id)
+ {
sa.AssignedSecurable = s;
- _assignedSecurables.Add(sa);
+ break;
+ }
}
+ _assignedSecurables.Add(sa);
}
}
}
@@ -264,9 +290,12 @@ namespace RoleEditor
foreach (Role r in this._roles)
{
if (ra.RoleId == r.Id)
+ {
ra.AssignedRole = r;
- _assignedRoles.Add(ra);
+ break;
+ }
}
+ _assignedRoles.Add(ra);
}
}
}
@@ -281,9 +310,20 @@ namespace RoleEditor
#region menuitem callbacks
- private void menuItemDeleteParticipant_Click(object sender, RoutedEventArgs e)
+ private async void menuItemDeleteParticipant_Click(object sender, RoutedEventArgs e)
{
-
+ try
+ {
+ if(this.listBoxParticipant.SelectedItem is Participant p)
+ {
+ await p.Delete(_dbManager);
+ this._participants.Remove(p);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
private void menuItemNewParticipant_Click(object sender, RoutedEventArgs e)
@@ -305,9 +345,20 @@ namespace RoleEditor
}
}
- private void menuItemDeleteUser_Click(object sender, RoutedEventArgs e)
+ private async void menuItemDeleteUser_Click(object sender, RoutedEventArgs e)
{
-
+ try
+ {
+ if (this.listBoxUser.SelectedItem is User u)
+ {
+ await u.Delete(_dbManager);
+ this._users.Remove(u);
+ }
+ }
+ catch(Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
private void menuItemNewRole_Click(object sender, RoutedEventArgs e)
@@ -317,9 +368,20 @@ namespace RoleEditor
this.listBoxRoles.SelectedItem = r;
}
- private void menuItemDeleteRole_Click(object sender, RoutedEventArgs e)
+ private async void menuItemDeleteRole_Click(object sender, RoutedEventArgs e)
{
-
+ try
+ {
+ if (this.listBoxRoles.SelectedItem is Role r)
+ {
+ await r.Delete(_dbManager);
+ this._roles.Remove(r);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
private void menuItemNewSecurable_Click(object sender, RoutedEventArgs e)
@@ -329,9 +391,20 @@ namespace RoleEditor
this.listBoxSecurables.SelectedItem = s;
}
- private void menuItemDeleteSecurable_Click(object sender, RoutedEventArgs e)
+ private async void menuItemDeleteSecurable_Click(object sender, RoutedEventArgs e)
{
-
+ try
+ {
+ if (this.listBoxSecurables.SelectedItem is Securable s)
+ {
+ await s.Delete(_dbManager);
+ this._securables.Remove(s);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
#endregion
diff --git a/src/brecal.model/DbEntity.cs b/src/brecal.model/DbEntity.cs
index dd0b778..e341bf7 100644
--- a/src/brecal.model/DbEntity.cs
+++ b/src/brecal.model/DbEntity.cs
@@ -45,7 +45,7 @@ namespace brecal.model
///
/// Each database entity must be able to save itself to the database
///
- public async void Save(IDBManager manager)
+ public async Task Save(IDBManager manager)
{
if (this.Created.HasValue)
{
@@ -60,7 +60,7 @@ namespace brecal.model
///
/// Each entity must be able to delete itself
///
- public async void Delete(IDBManager manager)
+ public async Task Delete(IDBManager manager)
{
await manager.ExecuteNonQuery(this.SetDelete);
}
diff --git a/src/brecal.model/RoleAssignment.cs b/src/brecal.model/RoleAssignment.cs
index 95498e1..26ea20d 100644
--- a/src/brecal.model/RoleAssignment.cs
+++ b/src/brecal.model/RoleAssignment.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Data;
namespace brecal.model
{
@@ -105,7 +100,7 @@ namespace brecal.model
}
else
{
- return $"{AssignedRole.Name}:{Id}";
+ return AssignedRole.Name ?? AssignedRole.Id.ToString();
}
}
diff --git a/src/brecal.model/SecurableAssignment.cs b/src/brecal.model/SecurableAssignment.cs
index fb7db00..ed1abf1 100644
--- a/src/brecal.model/SecurableAssignment.cs
+++ b/src/brecal.model/SecurableAssignment.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Data;
namespace brecal.model
{
@@ -73,7 +68,17 @@ namespace brecal.model
public override void SetCreate(IDbCommand cmd)
{
- throw new NotImplementedException();
+ cmd.CommandText = "INSERT INTO role_securable_map (securable_id, role_id) VALUES (@SECURABLEID, @ROLEID)";
+
+ IDbDataParameter userid = cmd.CreateParameter();
+ userid.ParameterName = "SECURABLEID";
+ userid.Value = this.SecurableId;
+ cmd.Parameters.Add(userid);
+
+ IDbDataParameter roleid = cmd.CreateParameter();
+ roleid.ParameterName = "ROLEID";
+ roleid.Value = this.RoleId;
+ cmd.Parameters.Add(roleid);
}
public override void SetDelete(IDbCommand cmd)
@@ -94,7 +99,7 @@ namespace brecal.model
}
else
{
- return $"{AssignedSecurable.Name}:{Id}";
+ return AssignedSecurable.Name ?? AssignedSecurable.Id.ToString();
}
}