You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

358 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 角色信息加载类
/// 创建人:李毓明
/// 创建时间2013-7-26
/// 说明:将角色信息绑定至组合框控件
/// </summary>
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();
}
}
/// <summary>
/// 窗体级权限信息加载类
/// 创建人:李毓明
/// 创建时间2013-7-26
/// 说明将窗体级权限信息加载至树形控件1级节点
/// </summary>
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);
}
}
}
/// <summary>
/// 控件级权限信息加载类
/// 创建人:李毓明
/// 创建时间2013-7-26
/// 说明将控件级权限信息加载至树形控件2级节点
/// </summary>
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);
}
}
}
}
/// <summary>
/// 初始化勾选角色的权限信息
/// 创建人:李毓明
/// 创建时间2013-7-29
/// 说明:根据角色的权限信息勾选权限树形控件
/// </summary>
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;
}
}
}
}
}
/// <summary>
/// 保存角色的权限信息
/// 创建人:李毓明
/// 创建时间2013-7-29
/// 说明:根据角色的权限信息勾选权限树形控件
/// </summary>
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();
}
}
}