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();
}
}
}