using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Mesnac.Action.Base; using Mesnac.Basic; using Mesnac.Codd.Session; using Mesnac.Controls.Base; namespace Mesnac.Action.Default.Purview { /// /// 角色信息加载类 /// 创建人:李毓明 /// 创建时间:2013-7-26 /// 说明:将角色信息绑定至组合框控件 /// public class BindRole : DatabaseAction, IAction { public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("初始化绑定角色下拉列表"); DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault(); if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl))) { base.LogError("角色信息加载 缺少角色组合框控件..."); return; } DbHelper dbhelper = NewDbHelper(basRoleControl.DesignSource); if (dbhelper == null) { return; } dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = "SELECT * FROM BasRole WHERE DeleteFlag='0';"; basRoleControl.BaseControl.BindDataSource = dbhelper.ToDataTable(); } } /// /// 窗体级权限信息加载类 /// 创建人:李毓明 /// 创建时间:2013-7-26 /// 说明:将窗体级权限信息加载至树形控件1级节点 /// public class LoadFormPurview : DatabaseAction, IAction { public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("向树控件初始化加载窗体级权限..."); DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePurview").FirstOrDefault(); if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView))) { base.LogError("窗体级权限加载 缺少权限树形控件..."); return; } DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource); if (dbhelper==null) { return; } dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = "SELECT * FROM BasForm WHERE DeleteFlag='0' ORDER BY FormText;"; DataTable dt = dbhelper.ToDataTable(); if (dt == null) { base.LogError("窗体级权限加载 信息加载失败..."); return; } TreeView tv = basRolePurviewControl.BaseControl as TreeView; tv.Nodes.Clear(); APurview frmPur; TreeNode nodeL1; foreach (DataRow dr in dt.Rows) { frmPur = new FormPurview(dr["ObjID"].ToString(), dr["FormName"].ToString(), dr["FormText"].ToString(), dr["FormType"].ToString()); nodeL1 = new TreeNode(frmPur.PurviewText); nodeL1.Name = frmPur.PurviewType + frmPur.ObjID; nodeL1.Tag = frmPur; tv.Nodes.Add(nodeL1); } } } /// /// 控件级权限信息加载类 /// 创建人:李毓明 /// 创建时间:2013-7-26 /// 说明:将控件级权限信息加载至树形控件2级节点 /// public class LoadFunctionPurview : DatabaseAction, IAction { public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("向树控件初始化加载控件级权限"); DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePurview").FirstOrDefault(); if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView))) { base.LogError("控件级权限加载 缺少权限树形控件..."); return; } DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource); if (dbhelper == null) { return; } dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = "SELECT * FROM BasFormFunction WHERE DeleteFlag='0' ORDER BY FunctionText;"; DataTable dt = dbhelper.ToDataTable(); if (dt == null) { base.LogError("控件级权限加载 信息加载失败..."); return; } TreeView tv = basRolePurviewControl.BaseControl as TreeView; APurview formPur, funcPur; TreeNode nodeL2; foreach (TreeNode nodeL1 in tv.Nodes) { nodeL1.Nodes.Clear(); formPur = nodeL1.Tag as FormPurview; foreach (DataRow dr in dt.Select("FormID='" + formPur.ObjID + "'")) { funcPur = new FunctionPurview(dr["ObjID"].ToString(), dr["FunctionName"].ToString(), dr["FunctionText"].ToString(), dr["FunctionType"].ToString()); nodeL2 = new TreeNode(funcPur.PurviewText); nodeL2.Tag = funcPur; nodeL2.Name = funcPur.PurviewType + funcPur.ObjID; nodeL1.Nodes.Add(nodeL2); } } } } /// /// 初始化勾选角色的权限信息 /// 创建人:李毓明 /// 创建时间:2013-7-29 /// 说明:根据角色的权限信息勾选权限树形控件 /// public class InitPurview : DatabaseAction, IAction { public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("在树控件中初始化勾选已有权限"); if (UserInfo.Instance.RoleID.Equals("-1") && UserInfo.MustLogin) { base.LogDebug("权限树初始化勾选 用户未登录"); return; } DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault(); DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePurview").FirstOrDefault(); if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl))) { base.LogError("权限树初始化勾选 缺少角色组合框控件..."); return; } if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView))) { base.LogError("权限树初始化勾选 缺少权限树形控件..."); return; } ListControl listCtrl = basRoleControl.BaseControl as ListControl; TreeView tv = basRolePurviewControl.BaseControl as TreeView; string roleId = listCtrl.SelectedValue == null ? string.Empty : listCtrl.SelectedValue.ToString(); DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource); if (dbhelper == null) { return; } dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = string.Format("SELECT * FROM BasRolePurview WHERE RoleID='{0}';", roleId); DataTable dt = dbhelper.ToDataTable(); if (dt == null) { base.LogError("权限树初始化勾选 角色的权限信息加载失败..."); return; } ClearTreeNodes(tv.Nodes); foreach (DataRow dr in dt.Rows) { CheckTreeNode(tv.Nodes, dr["PurviewType"].ToString() + dr["PurviewID"].ToString()); } } private void ClearTreeNodes(TreeNodeCollection tnc) { foreach (TreeNode n in tnc) { n.Checked = false; if (n.Nodes != null) { ClearTreeNodes(n.Nodes); } } } //private void CheckTreeNode(TreeNodeCollection tnc, string NodeName) //{ // foreach (TreeNode n in tnc) // { // if (n.Name == NodeName) // n.Checked = true; // if (n.Nodes != null) // { // CheckTreeNode(n.Nodes, NodeName); // } // } //} private void CheckTreeNode(TreeNodeCollection tnc, string NodeName) { foreach (TreeNode n in tnc) { if (n.Nodes != null && n.Nodes.Count > 0) { foreach (TreeNode childNode in n.Nodes) { if (childNode.Name == NodeName && childNode.Checked == false) { childNode.Checked = true; } } } else { if (n.Name == NodeName && n.Checked == false) { n.Checked = true; } } } } } /// /// 保存角色的权限信息 /// 创建人:李毓明 /// 创建时间:2013-7-29 /// 说明:根据角色的权限信息勾选权限树形控件 /// public class SavePurview : DatabaseAction, IAction { public void Run(RuntimeParameter runtime) { base.RunIni(runtime); base.LogDebug("执行给某角色分配保存权限"); if (UserInfo.Instance.RoleID.Equals("-1") && UserInfo.MustLogin) { base.LogDebug("保存角色权限 用户未登录"); return; } DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault(); DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePurview").FirstOrDefault(); if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl))) { base.LogError("保存角色权限 缺少角色组合框控件..."); return; } if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView))) { base.LogError("保存角色权限 缺少权限树形控件..."); return; } ListControl listCtrl = basRoleControl.BaseControl as ListControl; TreeView tv = basRolePurviewControl.BaseControl as TreeView; string roleId = listCtrl.SelectedValue == null ? string.Empty : listCtrl.SelectedValue.ToString(); DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource); if (dbhelper == null) { return; } save(dbhelper, tv.Nodes, roleId); ShowMsg(Language(10)); } private void save(DbHelper dbhelper, TreeNodeCollection tnc, string roleId) { foreach (TreeNode n in tnc) { if (n.Checked) { insert(dbhelper, n.Tag as APurview, roleId); } else { delete(dbhelper, n.Tag as APurview, roleId); } if (n.Nodes != null) { save(dbhelper, n.Nodes, roleId); } } } private void insert(DbHelper dbhelper, APurview aPurview, string roleId) { if (aPurview == null) return; StringBuilder sb = new StringBuilder(); sb.AppendLine("IF NOT EXISTS(SELECT * FROM BasRolePurview WHERE RoleID=@RoleID AND PurviewID=@PurviewID AND PurviewType=@PurviewType)"); sb.AppendLine("INSERT INTO BasRolePurview(RoleID,PurviewID,PurviewType)"); sb.AppendLine("VALUES(@RoleID,@PurviewID,@PurviewType)"); dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = sb.ToString(); dbhelper.AddParameter("@RoleID", int.Parse(roleId)); dbhelper.AddParameter("@PurviewID", int.Parse(aPurview.ObjID)); dbhelper.AddParameter("@PurviewType", aPurview.PurviewType); dbhelper.ExecuteNonQuery(); } private void delete(DbHelper dbhelper, APurview aPurview, string roleId) { if (aPurview == null) return; dbhelper.ClearParameter(); dbhelper.CommandType = CommandType.Text; dbhelper.CommandText = "DELETE FROM BasRolePurview WHERE RoleID=@RoleID AND PurviewID=@PurviewID AND PurviewType=@PurviewType"; dbhelper.AddParameter("@RoleID", int.Parse(roleId)); dbhelper.AddParameter("@PurviewID", int.Parse(aPurview.ObjID)); dbhelper.AddParameter("@PurviewType", aPurview.PurviewType); dbhelper.ExecuteNonQuery(); } } }