UserSecurityTokenPage.xaml.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. namespace PRSDesktop
  10. {
  11. /// <summary>
  12. /// Interaction logic for SecurityTokenPanel.xaml
  13. /// </summary>
  14. public partial class UserSecurityTokenPage : UserControl, IDynamicCustomEditorPage<User>
  15. {
  16. private readonly UserTokenGrid grid = new();
  17. public bool ReadOnly { get; set; }
  18. public UserSecurityTokenPage()
  19. {
  20. InitializeComponent();
  21. Content = grid;
  22. }
  23. public bool Ready { get; set; }
  24. public DynamicEditorGrid EditorGrid { get; set; }
  25. public PageType PageType => PageType.Other;
  26. public void AfterSave(object item)
  27. {
  28. var updates = new List<UserSecurityToken>();
  29. var deletes = new List<UserSecurityToken>();
  30. foreach (var token in grid.Tokens)
  31. {
  32. var uti = grid.Items.FirstOrDefault(x => x.Code.Equals(token.Descriptor.Split('.').Last()));
  33. if (uti.HasValue)
  34. {
  35. if (token.IsChanged())
  36. updates.Add(token);
  37. }
  38. else
  39. {
  40. if (token.ID != Guid.Empty)
  41. deletes.Add(token);
  42. }
  43. }
  44. if (updates.Any())
  45. new Client<UserSecurityToken>().Save(updates, "");
  46. foreach (var delete in deletes)
  47. new Client<UserSecurityToken>().Delete(delete, "");
  48. }
  49. public void BeforeSave(object item)
  50. {
  51. }
  52. public string Caption()
  53. {
  54. return "Security Tokens";
  55. }
  56. public void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
  57. {
  58. var user = item as User;
  59. grid.GroupID = user.SecurityGroup.ID;
  60. grid.UserID = user.ID;
  61. grid.Refresh(true, true);
  62. Ready = true;
  63. }
  64. public Size MinimumSize()
  65. {
  66. return new Size(300, 600);
  67. }
  68. public int Order()
  69. {
  70. return 0;
  71. }
  72. public event EventHandler? OnChanged;
  73. public void DoChanged()
  74. {
  75. OnChanged?.Invoke(this, EventArgs.Empty);
  76. }
  77. }
  78. }