Пример #1
0
 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));
 }
Пример #2
0
        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;
            }));
        }