/// <summary> /// 显示组的权限 /// </summary> /// <param name="detailGroupAuths"></param> public void ShowGroupAutority(DataTable detailGroupAuths) { try { _treeAuthority.AfterCheck -= new TreeViewEventHandler(OnTreeAuthorityAfterCheck); //一级结点,模块的主菜单 foreach (TreeNode node in _treeAuthority.Nodes) { AuthNodeTag tag = node.Tag as AuthNodeTag; if (tag.MenuItem.Tag != null && tag.MenuItem.Tag is MenuItemTag) { int moduleTag = (tag.MenuItem.Tag as MenuItemTag).ModuleID; DataRow row = GetDataRowByMenuName(detailGroupAuths, moduleTag, tag.AuthID); tag.DataRow = row; node.Checked = row != null; if (node.Nodes.Count > 0) { ShowGroupAuthorityChild(node, detailGroupAuths); } } } } catch (Exception ex) { Msg.ShowException(ex); } finally { _treeAuthority.AfterCheck += new TreeViewEventHandler(OnTreeAuthorityAfterCheck); } }
/// <summary> /// 显示组的权限,ShowGroupAutority方法的子程序 /// </summary> /// <param name="node"></param> /// <param name="detailGroupAuths"></param> private void ShowGroupAuthorityChild(TreeNode node, DataTable detailGroupAuths) { foreach (TreeNode n in node.Nodes) { AuthNodeTag tag = n.Tag as AuthNodeTag; if (tag.MenuItem.Tag != null && tag.MenuItem.Tag is MenuItemTag) { int moduleID = (tag.MenuItem.Tag as MenuItemTag).ModuleID; DataRow row = GetDataRowByMenuName(detailGroupAuths, moduleID, tag.AuthID); tag.DataRow = row; n.Checked = row != null; if (n.Checked) { this.TreeNodeParentSelected(n, true); } if (tag.MenuType == MenuType.DataForm)//show the business Actions { ShowAction(n, row); } else if (n.Nodes.Count > 0) { ShowGroupAuthorityChild(n, detailGroupAuths); } } } }
/// <summary> /// 递归处理子结点,GetGroupAuthorityChanges方法的子程序。 /// </summary> /// <param name="node">父结点</param> /// <param name="auths">树视图绑定的权限数据</param> private void GetGroupAuthorityChangesChild(TreeNode node, DataTable auths) { foreach (TreeNode n in node.Nodes) { if ((n.Tag == null) || (!(n.Tag is AuthNodeTag))) { continue; //非菜单项. } AuthNodeTag tag = n.Tag as AuthNodeTag; //树结点的引用对象 if (tag.DataRow == null && n.Checked) // 此结点是新增的,勾选状态 { AddAuthority(auths, n); } else if (tag.DataRow != null && n.Checked) //处理勾选状态的结点 { int changed = GetActions(n); //累加权限值 int oringed = int.Parse(tag.DataRow[TUserRole.Authorities].ToString()); //取原始权限值 if (changed != oringed) { tag.DataRow[TUserRole.Authorities] = changed; //如权限有修改,更新最新的权限值 } } else if (tag.DataRow != null && !n.Checked) //结点非勾选状态,表示已删除 { tag.DataRow.Delete(); //删除资料行 } if (n.Nodes.Count > 0) { GetGroupAuthorityChangesChild(n, auths); } } }
/// <summary> /// 枚举树视图,生成保存用的临时数据。 /// 思路:枚举树视图中所有树结点,跟据树结点的操作状态(新增,修改)生成资料行(DataRow) /// 新增:结点没绑定DataRow且结点打勾. 为新增权限 /// 修改: 结点有绑定DataRow且结点没有打勾. 为删除权限 /// </summary> /// <param name="auths">树视图绑定的权限数据</param> /// <returns></returns> private DataTable GetGroupAuthorityChanges(DataTable auths) { foreach (TreeNode node in _treeAuthority.Nodes) { AuthNodeTag tag = node.Tag as AuthNodeTag; //结点没绑定DataRow且结点打勾. 为新增权限 if (tag.DataRow == null && node.Checked) { AddAuthority(auths, node); } //结点有绑定DataRow且结点没有打勾. 为删除权限 else if (tag.DataRow != null && !node.Checked) { tag.DataRow.Delete(); } //递归处理子结点 if (node.Nodes.Count > 0) { GetGroupAuthorityChangesChild(node, auths); } } //返回修改的记录 DataTable ret = auths.GetChanges(); return(ret == null?auths.Clone() : ret); }
/// <summary> /// 生成权限管理树视图 - 第一级树结点 /// </summary> public void InitAuthorityTree() { try { //取按钮自定义名称数据表 _FormTagCustomName = _MyBridge.GetFormTagCustomName(); this._treeAuthority.BeforeCheck += new TreeViewCancelEventHandler(OnTreeAuthorityBeforeCheck); this._treeAuthority.AfterCheck -= new TreeViewEventHandler(OnTreeAuthorityAfterCheck); this._treeAuthority.Nodes.Clear(); this._treeAuthority.BeginUpdate(); IMdiForm mainForm = (IMdiForm)_treeAuthority.FindForm().ParentForm;//取MDI主窗体的主菜单 //枚举主窗体的菜单 foreach (ToolStripItem item in mainForm.MainMenu.Items) { if (item is ToolStripSeparator) { continue; //菜单分隔符不处理 } if (item.Tag != null && item.Tag.ToString().ToUpper() == "IsSystemMenu".ToUpper()) { continue; //系统菜单不处理 } if (!Loginer.CurrentUser.IsAdmin() && !item.Enabled) { continue; //没菜单权限(菜单不可用).不加载树 } AuthNodeTag tag = new AuthNodeTag(item.Name, null, item); TreeNode node = new TreeNode(item.Text, 0, 0); node.ImageIndex = 0; node.SelectedImageIndex = 0; node.Tag = tag; //标记 this._treeAuthority.Nodes.Add(node); //处理子菜单 if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) { InitAuthorityTreeChild(item as ToolStripMenuItem, node); node.Expand(); } } this._treeAuthority.EndUpdate(); if (this._treeAuthority.Nodes.Count == 1) { this._treeAuthority.Nodes[0].Expand(); } } finally { this._treeAuthority.AfterCheck += new TreeViewEventHandler(OnTreeAuthorityAfterCheck); } }
/// <summary> /// 生成权限管理树视图 - 子级树结点 /// </summary> private void InitAuthorityTreeChild(ToolStripMenuItem parent, TreeNode parentNode) { foreach (ToolStripItem item in parent.DropDownItems) { if (item is ToolStripSeparator) { continue; //分隔符不在树显示 } if (!Loginer.CurrentUser.IsAdmin() && !item.Enabled) { continue; //没菜单权限.不加载树 } AuthNodeTag tag = new AuthNodeTag(item.Name, null, item); TreeNode node = new TreeNode(item.Text, 0, 0); node.Tag = tag; parentNode.Nodes.Add(node); if (item.Tag != null && item.Tag is MenuItemTag) //数据窗体菜单 { if ((item.Tag as MenuItemTag).FormAuthorities > 0) //窗体有权限 { node.ImageIndex = 1; node.SelectedImageIndex = 1; InitAction(node, item); //生成功能点结点 } else { node.ImageIndex = 3; //signle form node.SelectedImageIndex = 3; } } else { node.ImageIndex = 3; //signle form node.SelectedImageIndex = 3; } //处理子菜单 if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) { InitAuthorityTreeChild(item as ToolStripMenuItem, node); } } }
/// <summary> /// 增加菜单权限 /// </summary> /// <param name="auths">权限表</param> /// <param name="node">当前处理的树结点</param> private void AddAuthority(DataTable auths, TreeNode node) { int actions = 0; int moduleID = 0; AuthNodeTag tag = node.Tag as AuthNodeTag; //取树结点的引用对象 //新增组权限记录 DataRow newrow = auths.NewRow(); newrow[TUserRole.GroupCode] = _groupName.Text; newrow[TUserRole.AuthorityID] = tag.AuthID; if (tag.MenuItem.Tag != null && tag.MenuItem.Tag is MenuItemTag) { //取当前处理的树结点所有权限值加总 actions = this.GetActions(node); moduleID = (tag.MenuItem.Tag as MenuItemTag).ModuleID;//模块编号 } newrow[TUserRole.Authorities] = actions; newrow[TUserRole.ModuleID] = moduleID; auths.Rows.Add(newrow); }