public AuthorizationListViewItem(AuthorizationRule item, AuthorizationPage page) : base(item.AccessType == 0L ? "Allow" : "Deny") { this.Item = item; _page = page; this.SubItems.Add(new ListViewSubItem(this, item.UsersString)); this.SubItems.Add(new ListViewSubItem(this, item.Roles)); this.SubItems.Add(new ListViewSubItem(this, item.Verbs)); this.SubItems.Add(new ListViewSubItem(this, item.Flag)); }
public NewRuleDialog(IServiceProvider serviceProvider, AuthorizationRule existing, bool allowed, AuthorizationFeature feature) : base(serviceProvider) { this.InitializeComponent(); _allowed = existing == null ? allowed : existing.AccessType == 0L; Text = string.Format("{0} {1} Authorization Rule", existing == null ? "Add" : "Edit", _allowed ? "Allow" : "Deny"); txtDescription.Text = _allowed ? "Allow access to this Web content to:" : "Deny access to this Web content to:"; _feature = feature; Item = existing ?? new AuthorizationRule(null); if (existing != null) { txtRoles.Text = Item.Roles; txtVerbs.Text = Item.Verbs; if (Item.Users == "*") { rbAll.Checked = true; } else if (Item.Users == "?") { rbAnonymous.Checked = true; } else { rbUsers.Checked = true; txtUsers.Text = Item.Users; } } var container = new CompositeDisposable(); FormClosed += (sender, args) => container.Dispose(); container.Add( Observable.FromEventPattern <EventArgs>(btnOK, "Click") .ObserveOn(System.Threading.SynchronizationContext.Current) .Subscribe(evt => { Item.AccessType = _allowed ? 0L : 1L; Item.Roles = string.Empty; if (rbAll.Checked) { Item.Users = "*"; } else if (rbAnonymous.Checked) { Item.Users = "?"; } else if (rbUsers.Checked) { Item.Users = txtUsers.Text; } if (rbRoles.Checked) { Item.Roles = txtRoles.Text; Item.Users = string.Empty; } if (cbVerbs.Checked) { Item.Verbs = txtVerbs.Text; } if (_feature.Items.Any(item => item.Match(this.Item))) { ShowMessage( "This authorization rule already exists.", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return; } DialogResult = DialogResult.OK; })); container.Add( Observable.FromEventPattern <EventArgs>(rbAll, "CheckedChanged") .Merge(Observable.FromEventPattern <EventArgs>(rbRoles, "CheckedChanged")) .Merge(Observable.FromEventPattern <EventArgs>(rbAnonymous, "CheckedChanged")) .Merge(Observable.FromEventPattern <EventArgs>(rbUsers, "CheckedChanged")) .Merge(Observable.FromEventPattern <EventArgs>(cbVerbs, "CheckedChanged")) .Sample(TimeSpan.FromSeconds(1)) .ObserveOn(System.Threading.SynchronizationContext.Current) .Subscribe(evt => { txtVerbs.Enabled = cbVerbs.Checked; txtRoles.Enabled = rbRoles.Checked; txtUsers.Enabled = rbUsers.Checked; btnOK.Enabled = (rbRoles.Checked && !string.IsNullOrWhiteSpace(txtRoles.Text)) || (rbUsers.Checked && !string.IsNullOrWhiteSpace(txtUsers.Text)) || rbAll.Checked || rbAnonymous.Checked; })); container.Add( Observable.FromEventPattern <EventArgs>(txtRoles, "TextChanged") .Merge(Observable.FromEventPattern <EventArgs>(txtUsers, "TextChanged")) .Merge(Observable.FromEventPattern <EventArgs>(txtVerbs, "TextChanged")) .Sample(TimeSpan.FromSeconds(1)) .ObserveOn(System.Threading.SynchronizationContext.Current) .Subscribe(evt => { btnOK.Enabled = true; })); }