/// <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; string sCon = tb_sys_Function.FModelID + "=" + moduleTag.ToString() + " and " + tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); 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; string sCon = tb_sys_Function.FModelID + "=" + moduleID.ToString() + " and " + tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); 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[tb_sys_UG_Auth.FAuths].ToString()); //取原始权限值 if (changed != oringed) { tag.DataRow[tb_sys_UG_Auth.FAuths] = 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> /// <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(); if (_UGID == 0) { _UGID = Convert.ToInt32(BridgeFactory.CreateCommonServiceBridge().GetTableID(tb_sys_UG_Auth.__TableName, tb_sys_UG_Auth.__KeyName)); } newrow[tb_sys_UG_Auth.FID] = _UGID.ToString(); _UGID++; newrow[tb_sys_UG_Auth.FUGID] = _GroupID; string sFun = tag.DataRow == null?tag.FUnctionID.ToString() : tag.DataRow[tb_sys_UG_Auth.FunctionID].ToString(); newrow[tb_sys_UG_Auth.FunctionID] = sFun == "" ? "0" : sFun; //tag.DataRow == null ? tag.FUnctionID : tag.DataRow[tb_sys_UG_Auth.FunctionID]; newrow[tb_sys_UG_Auth.FMenu] = tag.AuthID; if (tag.MenuItem.Tag != null && tag.MenuItem.Tag is MenuItemTag) { //取当前处理的树结点所有权限值加总 actions = this.GetActions(node); moduleID = (tag.MenuItem.Tag as MenuItemTag).ModuleID;//模块编号 } newrow[tb_sys_UG_Auth.FModelID] = moduleID; newrow[tb_sys_UG_Auth.FAuths] = actions; //newrow[TUserRole.Authorities] = actions; //newrow[TUserRole.ModuleID] = moduleID; auths.Rows.Add(newrow); }
/// <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); string sfilter = string.Format(tb_sys_Function.FNumber + "='{0}'", item.Name); DataRow[] rsF = DataDictCache.Cache.Function.Select(sfilter); if (rsF.Length > 0) { tag.DataRow = rsF[0]; } string sCon = tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); if (tag.FUnctionID == "") { tag.FUnctionID = "0"; } 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="node">功能点所在的树结点</param> /// <param name="menuItem">菜单项</param> private void InitAction(TreeNode node, ToolStripItem menuItem) { if (menuItem.Tag == null || !(menuItem.Tag is MenuItemTag)) { return; //功能菜单没有分配权限,不处理 } MenuItemTag menuItemTag = menuItem.Tag as MenuItemTag; //取菜单的功能权限对象 if (menuItemTag.MenuType != MenuType.DataForm) { return; //只处理数据窗体 } if (menuItemTag.FormAuthorities == 0) { return; //此菜单对应的窗体没有分配权限(功能点) } //取当前菜单权限.SystemAuthentication.UserAuthorities当前用户的权限数据 DataRow auth = GetDataRowByMenuName(SystemAuthentication.UserAuthorities, menuItemTag.ModuleID, menuItem.Name); int userAuths = auth == null ? 0 : ConvertEx.ToInt(auth[tb_sys_UG_Auth.FAuths]); //当前用户拥有此菜单的权限 AuthNodeTag tag1 = node.Tag as AuthNodeTag; //取树结点的引用对象 //int formAuths = menuItemTag.FormAuthorities; //窗体可用的功能点 bool isAdmin = Loginer.CurrentUser.IsAdmin(); //是否系统管理员 int formAuths = tag1.DataRow == null ? 0 :Convert.ToInt32(tag1.DataRow[tb_sys_Function.FAuths].ToString()); string sFun = tag1.DataRow == null?tag1.FUnctionID.ToString() : tag1.DataRow[tb_sys_Function.__KeyName].ToString(); string filter = string.Format(tb_sys_Fun_MenuBar.FFunctionID + "={0}", sFun); DataRow[] rs = _AuthorityItem.Select(filter); foreach (DataRow row in rs) //循环所有功能点. { int value = int.Parse(row[tb_sys_Fun_MenuBar.FAuthority].ToString()); //功能点权限值 if (value == 0) { continue; //不显示权限值为0的功能点 } if ((value & formAuths) != value) { continue; } //用每个功能点的值与窗体的最大权限进行逻辑"与"运算, 但不能超出当前用户的权限. //if (isAdmin || ((value & userAuths) == value)) //{ string caption = row[tb_sys_Fun_MenuBar.FName].ToString(); //取功能点名称 //DataRow tagNameRow = GetCustomTagName(menuItem.Name, value); //取功能点的自定义名称资料行 //if (tagNameRow != null) caption = tagNameRow["TagName"].ToString();//如果有自定义名称,则取定义名 //构建一个树结点Tag属性的引用对象,Node.Tag=引用对象 ActionNodeTag tag = new ActionNodeTag(value, auth); tag.TagMenuNameRef = menuItem.Name; tag.TagNameTable = _FormTagCustomName; tag.TagNameDataRow = row; tag.TagNameOld = caption; //按钮标题 TreeNode actionNode = new TreeNode(caption, 0, 0); //新增树结点 actionNode.Tag = tag; //绑定引用的对象 actionNode.ImageIndex = 2; actionNode.SelectedImageIndex = 2; node.Nodes.Add(actionNode); //} } }
/// <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); string sfilter = string.Format(tb_sys_Function.FNumber + "='{0}'", item.Name); DataRow[] rsF = DataDictCache.Cache.Function.Select(sfilter); if (rsF.Length > 0) { tag.DataRow = rsF[0]; } string sCon = tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); if (tag.FUnctionID == "") { tag.FUnctionID = "0"; } 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); string sfilter = string.Format(tb_sys_Function.FNumber + "='{0}'", item.Name); DataRow[] rsF = DataDictCache.Cache.Function.Select(sfilter); if (rsF.Length > 0) { tag.DataRow = rsF[0]; } string sCon = tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); if (tag.FUnctionID == "") tag.FUnctionID = "0"; 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> 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); string sfilter = string.Format(tb_sys_Function.FNumber + "='{0}'" , item.Name); DataRow[] rsF = DataDictCache.Cache.Function.Select(sfilter); if (rsF.Length > 0) { tag.DataRow = rsF[0]; } string sCon = tb_sys_Function.FNumber + " = '" + tag.AuthID + "'"; tag.FUnctionID = bllComDataBaseTool.GetTableFieldValue(tb_sys_Function.__TableName, tb_sys_Function.__KeyName, sCon); if (tag.FUnctionID == "") tag.FUnctionID = "0"; 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); } }