using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; using Volian.Base.Library; namespace VEPROMS { public partial class dlgManageSecurity : Form { #region Log4Net private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #endregion private GroupInfoList myGroupInfoList; private UserInfoList myUserInfoList; private List myMembershipInfoList; private Folder myFolder; public dlgManageSecurity() { InitializeComponent(); } private void dlgManageSecurity_Load(object sender, EventArgs e) { myFolder = Folder.Get(1); SetupSecurity(); SetupGroups(); } private void SetupGroups() { pnlGroups.Controls.Clear(); foreach (GroupInfo gi in myGroupInfoList) { RadioButton rb = new RadioButton(); rb.Text = gi.GroupName; rb.Parent = pnlGroups; rb.Dock = DockStyle.Top; rb.Tag = gi; rb.CheckedChanged += new EventHandler(rb_CheckedChanged); pnlGroups.Controls.Add(rb); rb.BringToFront(); if (myFolder.FolderConfig.Security_Group == 0 && gi.GID == 1) { myFolder.FolderConfig.Security_Group = gi.GID; rb.Checked = true; myFolder.Save(); } else if (myFolder.FolderConfig.Security_Group == gi.GID) { rb.Checked = true; } } } private void rb_CheckedChanged(object sender, EventArgs e) { RadioButton rb = sender as RadioButton; GroupInfo gi = rb.Tag as GroupInfo; label8.Text = gi.GroupAssignments[0].MyRole.Title + " for " + gi.GroupAssignments[0].MyFolder.Name; myFolder.FolderConfig.Security_Group = gi.GID; myFolder.Save(); } private void SetupSecurity() { if (tvFolders.Nodes.Count == 0) { FolderInfo fi = FolderInfo.Get(1); LoadChildFolders(fi, null); } lstMembers.Items.Clear(); lstUsers.Items.Clear(); lstGroups.Items.Clear(); GroupInfoList.Reset(); UserInfoList.Reset(); myGroupInfoList = GroupInfoList.Get(); myUserInfoList = UserInfoList.Get(); foreach (GroupInfo gi in myGroupInfoList) lstGroups.Items.Add(gi.GroupName); lstGroups.SelectedIndex = 0; foreach (UserInfo ui in myUserInfoList) lstUsers.Items.Add(ui.UserID); lstGroups.SelectedIndex = -1; lstUsers.SelectedIndex = -1; } private void LoadChildFolders(FolderInfo fi, TreeNode tn) { if (tn == null) { tn = tvFolders.Nodes.Add(fi.Name); tn.Tag = fi; } else { tn = tn.Nodes.Add(fi.Name); tn.Tag = fi; } if (fi.ChildFolderCount > 0) { foreach (FolderInfo fic in fi.SortedChildFolders) { LoadChildFolders(fic, tn); } } } private void lstGroups_SelectedIndexChanged(object sender, EventArgs e) { lblMembers.Text = "Selected Group Users"; myMembershipInfoList = new List(); lstMembers.Items.Clear(); if (lstGroups.SelectedIndex > -1) { GroupInfo gi = myGroupInfoList[lstGroups.SelectedIndex]; if (gi.GroupMembershipCount > 0) foreach (MembershipInfo mi in gi.GroupMemberships) { if (mi.EndDate == null || mi.EndDate == string.Empty) { myMembershipInfoList.Add(mi); lstMembers.Items.Add(mi.MyUser.UserID); } } } } private void addMemberToolStripMenuItem_Click(object sender, EventArgs e) { int groupIndex = lstGroups.SelectedIndex; int userIndex = lstUsers.SelectedIndex; GroupInfo gi = myGroupInfoList[groupIndex]; UserInfo ui = myUserInfoList[userIndex]; Membership.MakeMembership(User.Get(ui.UID), Group.Get(gi.GID), null, ""); SetupSecurity(); if ((sender as ToolStripMenuItem).Name.EndsWith("Group")) { lstUsers.SelectedIndex = userIndex; lstGroups.SelectedIndex = groupIndex; } else { lstGroups.SelectedIndex = groupIndex; lstUsers.SelectedIndex = userIndex; } } private void removeMemberToolStripMenuItem_Click(object sender, EventArgs e) { MembershipInfo mi = myMembershipInfoList[lstMembers.SelectedIndex]; string msg = "Are you sure you want to remove this Group Member?"; if (MessageBox.Show(this, msg, "Confirm Group Member Removal", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { int groupIndex = lstGroups.SelectedIndex; int userIndex = lstUsers.SelectedIndex; if (mi.MyGroup.GroupName == "Administrators") { int k = 0; foreach(MembershipInfo mm in mi.MyGroup.GroupMemberships) if(mm.EndDate == null || mm.EndDate == string.Empty) k++; if (k == 1) { MessageBox.Show("You must have at least 1 user assigned to the Adminstrators group", "One Administrator Required", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } Membership m = Membership.Get(mi.UGID); m.EndDate = DateTime.Now.ToShortDateString(); m.Save(); SetupSecurity(); lstGroups.SelectedIndex = groupIndex; lstUsers.SelectedIndex = userIndex; } // foreach (int gg in lstGroups.SelectedIndices) // { // GroupInfo gi = myGroupInfoList[gg]; // if (gi.GroupName == "Administrators" && gi.GroupMembershipCount == 1) // { // MessageBox.Show("You must have at least 1 user assigned to the Adminstrators group", "Can Not Delete User", MessageBoxButtons.OK, MessageBoxIcon.Warning); // return; // } // foreach (MembershipInfo mi in gi.GroupMemberships) // { // foreach (int mm in lstGroupUsers.SelectedIndices) // { // MembershipInfo mig = myMembershipInfoList[mm]; // if (mi.MyUser.UID == mig.MyUser.UID) // { // Membership m = Membership.Get(mi.UGID); // m.EndDate = DateTime.Now.ToShortDateString(); // m.Save(); // } // } // } // } // SetupSecurity(); //} } private void addUserToolStripMenuItem_Click(object sender, EventArgs e) { User u = User.MakeUser("[Enter New UserID]","", "", "", "", "", "", "", "", "", "",DateTime.Now,""); frmManageUser frm = new frmManageUser("add"); frm.MyUser = u; if (frm.ShowDialog(this) == DialogResult.OK) { u = frm.MyUser; u.Save(); Membership.MakeMembership(u, Group.Get(myFolder.FolderConfig.Security_Group), "", ""); SetupSecurity(); } else { u.Delete(); } } private void editUserToolStripMenuItem_Click(object sender, EventArgs e) { if (lstUsers.SelectedIndex == -1) { MessageBox.Show("You must select a user to edit", "No User Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } UserInfo ui = myUserInfoList[lstUsers.SelectedIndex]; using (User u = User.Get(ui.UID)) { frmManageUser frm = new frmManageUser("edit"); frm.MyUser = u; if (frm.ShowDialog(this) == DialogResult.OK) { frm.MyUser.Save(); SetupSecurity(); } } } private void deleteUserToolStripMenuItem_Click(object sender, EventArgs e) { if (lstUsers.SelectedIndex == -1) { MessageBox.Show("You must select a user to delete", "No User Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } UserInfo ui = myUserInfoList[lstUsers.SelectedIndex]; SessionInfoList sil = SessionInfoList.Get(); foreach (SessionInfo si in sil) { if (si.UserID == ui.UserID && (si.DTSEnd == null)) { MessageBox.Show("The user selected has an active session. You may not delete the user at this time.", "User Active Session", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } int k = 0; if (ui.UserMembershipCount > 0) { foreach (MembershipInfo mi in ui.UserMemberships) { if (mi.EndDate == null || mi.EndDate == string.Empty) k++; } } if (k > 0) { MessageBox.Show("You must remove user from all groups that user is a member of in order to delete user", "User Has Memberships", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (MessageBox.Show("Are you sure you want to delete this user?", "Confirm Deleting User", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { User.Delete(ui.UID); SetupSecurity(); } //to do delete user //end date user memberships //delete user } private void createGroupMenuItem(object sender, EventArgs e) { try { ToolStripDropDownItem tsddi = sender as ToolStripDropDownItem; TreeNode tn = tvFolders.SelectedNode; FolderInfo fi = tn.Tag as FolderInfo; AddNewGroup(tsddi.Text, fi); SetupSecurity(); } catch (Exception ex) { _MyLog.Warn("createGroupMenuItem", ex); } } private void AddNewGroup(string txt, FolderInfo fi) { txt = txt.Replace("Create", "").Replace(" a ", "").Replace("Group", "").Trim(); RoleInfoList ril = RoleInfoList.Get(); // B2022-080: cannot add a new group in Proms security. if the sql database's 'Roles' table was not initialized with the default roles, such as Set Administrator, // Writer, Reviewer, RO Editor, the Adding of new groups won't work. Databases should have this loaded by default. // Promsfixes has queries that insert these, but only gets run if there are no assignments (see commands under --define Roles) if (ril == null || ril.Count < 2) { MessageBox.Show("Roles table is missing entries.\r\nPlease contact Volian to create other groups.", "Cannot create groups", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } foreach(RoleInfo ri in ril) { if (ri.Name == txt) { string gin = string.Format("{0}s - {1}", ri.Name, fi.Name); bool addOK = true; foreach (GroupInfo gi in myGroupInfoList) { if (gin == gi.GroupName) { addOK = false; break; } } if (addOK) { Group group = Group.MakeGroup(gin, null, null); Assignment.MakeAssignment(group, Role.Get(ri.RID), Folder.Get(fi.FolderID), null); } } } GroupInfoList.Reset(); myGroupInfoList = GroupInfoList.Get(); SetupGroups(); } private void lstUsers_SelectedIndexChanged(object sender, EventArgs e) { lblMembers.Text = "Selected User Groups"; myMembershipInfoList = new List(); lstMembers.Items.Clear(); if (lstUsers.SelectedIndex > -1) { UserInfo ui = myUserInfoList[lstUsers.SelectedIndex]; if (ui.UserMembershipCount > 0) { foreach (MembershipInfo mi in ui.UserMemberships) { if (mi.EndDate == null || mi.EndDate == string.Empty) { myMembershipInfoList.Add(mi); lstMembers.Items.Add(mi.MyGroup.GroupName); } } } } } private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { tvFolders.SelectedNode = e.Node; } private void deleteGroupToolStripMenuItem_Click(object sender, EventArgs e) { if (lstGroups.SelectedIndex < 0) { MessageBox.Show("You must select a group to delete", "No Group Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GroupInfo gi = myGroupInfoList[lstGroups.SelectedIndex]; if(myFolder.FolderConfig.Security_Group == gi.GID) { MessageBox.Show("Cannot Delete Default Group", "Attempt to Delete Default", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } bool deleteOK = true; if(gi.GroupMembershipCount > 0) { foreach (MembershipInfo mi in gi.GroupMemberships) { if (mi.EndDate == null || mi.EndDate == string.Empty) { deleteOK = false; break; } } } if (!deleteOK) { MessageBox.Show("There are still users who are members of this group. You need to delete all members in order to delete this group.", "Group Has Members", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (MessageBox.Show("Are you sure you want to delete this group?", "Confirm Deleting Group", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { Group.Delete(gi.GID); GroupInfoList.Reset(); myGroupInfoList = GroupInfoList.Get(); SetupGroups(); SetupSecurity(); } } private void lstGroups_MouseUp(object sender, MouseEventArgs e) { lstGroups.SelectedIndex = -1; if (e.Button == MouseButtons.Right) { int k = lstGroups.IndexFromPoint(e.Location); if (k >= 0) { lstGroups.SelectedIndex = k; if (lstUsers.SelectedIndex >= 0) { GroupInfo gi = myGroupInfoList[k]; if (gi.GroupMembershipCount > 0) { addMemberToolStripMenuItemGroup.Visible = true; UserInfo ui = myUserInfoList[lstUsers.SelectedIndex]; foreach (MembershipInfo mi in gi.GroupMemberships) { if (mi.MyUser.UserID == ui.UserID && (mi.EndDate == null || mi.EndDate == string.Empty)) { addMemberToolStripMenuItemGroup.Visible = false; break; } } } } else addMemberToolStripMenuItemGroup.Visible = false; cmGroups.Show(lstGroups, e.Location); } } else if (e.Button == MouseButtons.Left) { int k = lstGroups.IndexFromPoint(e.Location); if (k >= 0) { lstGroups.SelectedIndex = k; } } } private void lstUsers_MouseUp(object sender, MouseEventArgs e) { lstUsers.SelectedIndex = -1; if (e.Button == MouseButtons.Right) { int k = lstUsers.IndexFromPoint(e.Location); if (k >= 0) { lstUsers.SelectedIndex = k; //addUserToolStripMenuItem.Visible = false; editUserToolStripMenuItem.Visible = deleteUserToolStripMenuItem.Visible = true; if (lstGroups.SelectedIndex >= 0) { UserInfo ui = myUserInfoList[k]; if(ui.UserMembershipCount > 0) { addMemberToolStripMenuItemUser.Visible = true; GroupInfo gi = myGroupInfoList[lstGroups.SelectedIndex]; foreach(MembershipInfo mi in ui.UserMemberships) { if (mi.MyGroup.GroupName == gi.GroupName && (mi.EndDate == null || mi.EndDate == string.Empty)) { addMemberToolStripMenuItemUser.Visible = false; break; } } } } else addMemberToolStripMenuItemUser.Visible = false; cmUsers.Show(lstUsers, e.Location); } else { addUserToolStripMenuItem.Visible = true; editUserToolStripMenuItem.Visible = deleteUserToolStripMenuItem.Visible = addMemberToolStripMenuItemUser.Visible = false; cmUsers.Show(lstUsers, e.Location); } } else if (e.Button == MouseButtons.Left) { int k = lstUsers.IndexFromPoint(e.Location); if (k >= 0) { lstUsers.SelectedIndex = k; } } } private void lstMembers_MouseUp(object sender, MouseEventArgs e) { lstMembers.SelectedIndex = -1; if (e.Button == MouseButtons.Right) { int k = lstMembers.IndexFromPoint(e.Location); if (k >= 0) { lstMembers.SelectedIndex = k; addMemberToolStripMenuItemUser.Visible = false; removeMemberToolStripMenuItem.Visible = true; cmMembers.Show(lstMembers, e.Location); } else { addMemberToolStripMenuItemUser.Visible = true; removeMemberToolStripMenuItem.Visible = false; cmMembers.Show(lstMembers, e.Location); } } else if (e.Button == MouseButtons.Left) { int k = lstMembers.IndexFromPoint(e.Location); if (k >= 0) { lstMembers.SelectedIndex = k; } } } } }