Exemple #1
0
 private bool changesMade()
 {
     foreach (DataGridViewRow r in gridRoles.Rows)
     {
         Role role = r.Tag as Role;
         DataGridViewCheckBoxCellEx c = r.Cells[0] as DataGridViewCheckBoxCellEx;
         if (c.CheckState == CheckState.Checked && roleAssignment[role].Count < subjects.Length)
         {
             return(true);
         }
         else if (c.CheckState == CheckState.Unchecked && roleAssignment[role].Count > 0)
         {
             return(true);
         }
         // Don't care about intermediate values, it's not possible to set them in the dialog
     }
     return(false);
 }
        public RoleSelectionDialog(Subject[] subjects, Pool pool) : this()
        {
            this.subjects = subjects;
            this.pool = pool;
            roleAssignment = new Dictionary<Role,List<Subject>>();
            if (subjects.Length == 1)
            {
                Subject subject = subjects[0];
                string sName = (subject.DisplayName ?? subject.SubjectName ?? Messages.UNKNOWN_AD_USER).Ellipsise(30);
                if (subject.IsGroup)
                {
                    labelBlurb.Text = String.Format(Messages.AD_SELECT_ROLE_GROUP, sName);
                    pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_UserAndGroup_h32bit_32;
                }
                else
                {
                    labelBlurb.Text = String.Format(Messages.AD_SELECT_ROLE_USER, sName);
                    pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_User_h32bit_16;
                }
            }
            else
            {
                labelBlurb.Text = Messages.AD_SELECT_ROLE_MIXED;
                pictureBoxSubjectType.Image = XenAdmin.Properties.Resources._000_User_h32bit_16;
            }

            // Get the list of roles off the server and arrange them into rank
            List<Role> serverRoles = new List<Role>(pool.Connection.Cache.Roles);
            //hide basic permissions, we only want the roles.
            serverRoles.RemoveAll(delegate(Role r){return r.subroles.Count < 1;});
            serverRoles.Sort();
            serverRoles.Reverse();
            foreach (Role r in serverRoles)
            {
                roleAssignment.Add(r, new List<Subject>());
            }
            foreach (Subject s in subjects)
            {
                List<Role> subjectRoles = (List<Role>)pool.Connection.ResolveAll<Role>(s.roles);
                foreach (Role r in subjectRoles)
                {
                    roleAssignment[r].Add(s);
                }
            }
            foreach (Role role in serverRoles)
            {
                DataGridViewRow r = new DataGridViewRow();
                DataGridViewCheckBoxCellEx c1 = new DataGridViewCheckBoxCellEx();
                c1.ThreeState = true;
                if (roleAssignment[role].Count == subjects.Length)
                {
                    c1.Value = CheckState.Checked;
                    c1.CheckState = CheckState.Checked;
                }
                else if (roleAssignment[role].Count == 0)
                {
                    c1.Value = CheckState.Unchecked;
                    c1.CheckState = CheckState.Unchecked;
                }
                else
                {
                    c1.Value = CheckState.Indeterminate;
                    c1.CheckState = CheckState.Indeterminate;
                }
                DataGridViewTextBoxCell c2 = new DataGridViewTextBoxCell();
                c2.Value = role.FriendlyName;
                r.Cells.Add(c1);
                r.Cells.Add(c2);
                r.Tag = role;
                gridRoles.Rows.Add(r);
            }
            setRoleDescription();
        }
Exemple #3
0
        public RoleSelectionDialog(IXenConnection connection, Subject[] subjects)
        {
            InitializeComponent();

            _connection = connection;

            this.subjects  = subjects;
            roleAssignment = new Dictionary <Role, List <Subject> >();

            var allAreGroups = subjects.Length > 0 && subjects.All(s => s.IsGroup);
            var allAreUsers  = subjects.Length > 0 && subjects.All(s => !s.IsGroup);

            pictureBoxSubjectType.Image = allAreUsers ? Properties.Resources._000_User_h32bit_16 : Properties.Resources._000_UserAndGroup_h32bit_32;

            if (subjects.Length == 1)
            {
                Subject subject = subjects[0];
                string  sName   = (subject.DisplayName ?? subject.SubjectName ?? Messages.UNKNOWN_AD_USER).Ellipsise(30);
                labelBlurb.Text = string.Format(allAreGroups ? Messages.AD_SELECT_ROLE_GROUP : Messages.AD_SELECT_ROLE_USER, sName);
            }
            else
            {
                if (allAreGroups)
                {
                    labelBlurb.Text = Messages.AD_SELECT_ROLE_GROUP_MANY;
                }
                else if (allAreUsers)
                {
                    labelBlurb.Text = Messages.AD_SELECT_ROLE_USER_MANY;
                }
                else
                {
                    labelBlurb.Text = Messages.AD_SELECT_ROLE_MIXED;
                }
            }

            // Get the list of roles off the server and arrange them into rank
            List <Role> serverRoles = new List <Role>(_connection.Cache.Roles);

            //hide basic permissions, we only want the roles.
            serverRoles.RemoveAll(delegate(Role r){ return(r.subroles.Count < 1); });
            serverRoles.Sort();
            serverRoles.Reverse();
            foreach (Role r in serverRoles)
            {
                roleAssignment.Add(r, new List <Subject>());
            }
            foreach (Subject s in subjects)
            {
                List <Role> subjectRoles = _connection.ResolveAll(s.roles);
                foreach (Role r in subjectRoles)
                {
                    roleAssignment[r].Add(s);
                }
            }
            foreach (Role role in serverRoles)
            {
                DataGridViewRow            r  = new DataGridViewRow();
                DataGridViewCheckBoxCellEx c1 = new DataGridViewCheckBoxCellEx();
                c1.ThreeState = true;
                if (roleAssignment[role].Count == subjects.Length)
                {
                    c1.Value      = CheckState.Checked;
                    c1.CheckState = CheckState.Checked;
                }
                else if (roleAssignment[role].Count == 0)
                {
                    c1.Value      = CheckState.Unchecked;
                    c1.CheckState = CheckState.Unchecked;
                }
                else
                {
                    c1.Value      = CheckState.Indeterminate;
                    c1.CheckState = CheckState.Indeterminate;
                }
                DataGridViewTextBoxCell c2 = new DataGridViewTextBoxCell();
                c2.Value = role.FriendlyName();
                r.Cells.Add(c1);
                r.Cells.Add(c2);
                r.Tag = role;
                gridRoles.Rows.Add(r);
            }
            setRoleDescription();
        }