123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Media.Imaging;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- namespace PRSDesktop
- {
- public class UserTokenGrid : DynamicGrid<UserTokenItem>
- {
- private Guid _groupid = Guid.Empty;
- private Guid _userid = Guid.Empty;
- private readonly BitmapImage defaultdisabled = PRSDesktop.Resources.disabled.Fade(0.25F).AsBitmapImage();
- private readonly BitmapImage defaulttick = PRSDesktop.Resources.tick.Fade(0.25F).AsBitmapImage();
- private readonly BitmapImage disabled = PRSDesktop.Resources.disabled.AsBitmapImage();
- private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
- public UserTokenGrid()
- {
- Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows);
- Items = new List<UserTokenItem>();
- LoadSystemTokens();
- LoadGlobalTokens();
- ActionColumns.Add(new DynamicImageColumn(TokenImage, TokenAction)
- { Filters = new[] { "Enabled", "Disabled", "Overridden" }, FilterRecord = TokenFilter });
- HiddenColumns.Add(x => x.Code);
- HiddenColumns.Add(x => x.Value);
- HiddenColumns.Add(x => x.Default);
- HiddenColumns.Add(x => x.HasValue);
- }
- public List<UserTokenItem> Items { get; }
- public List<UserSecurityToken> Tokens { get; private set; }
- public Guid GroupID
- {
- get => _groupid;
- set
- {
- _groupid = value;
- LoadGroupTokens();
- }
- }
- public Guid UserID
- {
- get => _userid;
- set
- {
- _userid = value;
- LoadUserTokens();
- }
- }
- private void LoadSystemTokens()
- {
- foreach (var descriptor in Security.Descriptors.Where(x => x.Visible && x.HasScope(SecurityDescriptorScope.User)))
- {
- var tokenitem = new UserTokenItem
- {
- Group = descriptor.Type,
- Code = descriptor.Code,
- Description = descriptor.Description,
- ID = Guid.Empty,
- Default = descriptor.Value,
- HasValue = false,
- Value = descriptor.Value
- };
- Items.Add(tokenitem);
- }
- }
- private void LoadGlobalTokens()
- {
- var globaltokens = new Client<GlobalSecurityToken>().Load();
- foreach (var globaltoken in globaltokens)
- {
- globaltoken.Descriptor = globaltoken.Descriptor.Split('.').Last();
- var item = Items.FirstOrDefault(x => x.Code.Equals(globaltoken.Descriptor));
- if (item != null)
- {
- item.Default = globaltoken.Enabled;
- item.HasValue = false;
- item.Value = globaltoken.Enabled;
- }
- }
- }
- private void LoadGroupTokens()
- {
- var grouptokens = new Client<SecurityToken>().Load(new Filter<SecurityToken>(x => x.Group.ID).IsEqualTo(_groupid));
- foreach (var grouptoken in grouptokens)
- {
- grouptoken.Descriptor = grouptoken.Descriptor.Split('.').Last();
- var item = Items.FirstOrDefault(x => x.Code.Equals(grouptoken.Descriptor));
- if (item != null)
- {
- item.Default = grouptoken.Enabled;
- item.HasValue = false;
- item.Value = grouptoken.Enabled;
- }
- }
- }
- private void LoadUserTokens()
- {
- Tokens = new Client<UserSecurityToken>().Load(new Filter<UserSecurityToken>(x => x.User.ID).IsEqualTo(_userid)).ToList();
- foreach (var token in Tokens)
- {
- token.Descriptor = token.Descriptor.Split('.').Last();
- var item = Items.FirstOrDefault(x => x.Code.Equals(token.Descriptor));
- if (item != null)
- {
- item.ID = token.ID;
- item.HasValue = true;
- item.Value = token.Enabled;
- }
- }
- }
- protected override void DeleteItems(params CoreRow[] row)
- {
- }
- public override void SaveItem(UserTokenItem item)
- {
- }
- protected override UserTokenItem LoadItem(CoreRow row)
- {
- return Items[row.Index];
- }
- protected override void Reload(Filters<UserTokenItem> criteria, Columns<UserTokenItem> columns, ref SortOrder<UserTokenItem> sort,
- Action<CoreTable, Exception> action)
- {
- var table = new CoreTable();
- foreach (var column in columns.Items)
- table.Columns.Add(new CoreColumn { ColumnName = column.ToString() });
- table.LoadRows(Items);
- action.Invoke(table, null);
- }
- private bool TokenFilter(CoreRow row, string[] filter)
- {
- var defvalue = row.Get<GroupTokenItem, bool>(x => x.Default);
- var hasvalue = row.Get<GroupTokenItem, bool>(x => x.HasValue);
- var actvalue = row.Get<GroupTokenItem, bool>(x => x.Value);
- if (filter.Contains("Enabled") && (hasvalue ? actvalue : defvalue))
- return true;
- if (filter.Contains("Disabled") && (hasvalue ? !actvalue : !defvalue))
- return true;
-
- if (filter.Contains("Overridden") && hasvalue)
- return true;
- return false;
- }
- private bool TokenAction(CoreRow row)
- {
- var result = false;
- var rows = row == null ? Data.Rows.ToArray() : new[] { row };
- foreach (var corrow in rows)
- {
- var Code = corrow.Get<UserTokenItem, string>(x => x.Code);
- var defvalue = corrow.Get<UserTokenItem, bool>(x => x.Default);
- var hasvalue = corrow.Get<UserTokenItem, bool>(x => x.HasValue);
- var actvalue = corrow.Get<UserTokenItem, bool>(x => x.Value);
- var token = Tokens.FirstOrDefault(x => x.Descriptor.Equals(Code));
- if (token == null)
- {
- token = new UserSecurityToken();
- token.Descriptor = Code;
- token.User.ID = _userid;
- Tokens.Add(token);
- }
- var item = Items.FirstOrDefault(x => x.Code.Equals(Code));
- if (item != null)
- {
- // novalue -> !default -> default -> novalue
- if (!item.HasValue)
- {
- item.Value = !item.Default;
- item.HasValue = true;
- }
- else
- {
- if (item.Value != item.Default)
- item.Value = item.Default;
- else
- item.HasValue = false;
- }
- token.Enabled = item.Value;
- result = true;
- }
- }
- return result;
- }
- private BitmapImage TokenImage(CoreRow row)
- {
- if (row == null)
- return tick;
- var defvalue = row.Get<UserTokenItem, bool>(x => x.Default);
- var hasvalue = row.Get<UserTokenItem, bool>(x => x.HasValue);
- var actvalue = row.Get<UserTokenItem, bool>(x => x.Value);
- return hasvalue ? actvalue ? tick : disabled : defvalue ? defaulttick : defaultdisabled;
- }
- protected override DynamicGridColumns LoadColumns()
- {
- var columns = new DynamicGridColumns();
- columns.Add(new DynamicGridColumn { ColumnName = "Group", Caption = "Group", Width = 100, Alignment = Alignment.MiddleLeft });
- columns.Add(new DynamicGridColumn { ColumnName = "Description", Caption = "Description", Width = 0, Alignment = Alignment.MiddleLeft });
- return columns;
- }
- }
- }
|