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.

496 lines
21 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 ICSharpCode.Core;
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);
ICSharpCode.Core.LoggingService<BindRole>.Debug("初始化绑定角色下拉列表");
DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault();
if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl)))
{
ICSharpCode.Core.LoggingService<BindRole>.Warn("角色信息加载 缺少角色组合框控件...");
return;
}
DbHelper dbhelper = NewDbHelper(basRoleControl.DesignSource);
if (dbhelper == null)
{
return;
}
dbhelper.ClearParameter();
dbhelper.CommandType = CommandType.Text;
dbhelper.CommandText = "SELECT * FROM BasRole WHERE DeleteFlag='0' ORDER BY SeqIndex;";
basRoleControl.BaseControl.BindDataSource = dbhelper.ToDataTable();
}
}
/// <summary>
/// 窗体级权限信息加载类
/// 创建人:郑立兵
/// 创建时间2013-7-26
/// 说明将窗体级权限信息加载至树形控件1级节点
/// </summary>
public class LoadFormPurview : DatabaseAction, IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
ICSharpCode.Core.LoggingService<LoadFormPurview>.Debug("向树控件初始化加载窗体级权限...");
DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
{
ICSharpCode.Core.LoggingService<LoadFormPurview>.Warn("窗体级权限加载 缺少权限树形控件...");
return;
}
DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource);
if (dbhelper==null)
{
return;
}
dbhelper.ClearParameter();
dbhelper.CommandType = CommandType.Text;
if (Mesnac.Basic.UserInfo.Instance.RoleGUID == "-99")
{
dbhelper.CommandText = "SELECT * FROM BasForm WHERE DeleteFlag='0' ORDER BY FormText;";
}
else
{
// dbhelper.CommandText = @"select TA.* from BasForm TA
// inner join BasRolePermission TB on TA.GUID = TB.PermissionItemGUID
// where TA.DeleteFlag='0' and TB.RoleGUID = @RoleGUID
// order by TA.FormText";
dbhelper.CommandText = @"select TA.* from BasForm TA
inner join BasInitPermission TB on TA.GUID = TB.PermissionItemGUID
where TA.DeleteFlag='0'
order by TA.FormText";
dbhelper.AddParameter("@RoleGUID", Mesnac.Basic.UserInfo.Instance.RoleGUID);
}
DataTable dt = dbhelper.ToDataTable();
if (dt == null)
{
ICSharpCode.Core.LoggingService<LoadFormPurview>.Warn("窗体级权限加载 信息加载失败...");
return;
}
TreeView tv = basRolePurviewControl.BaseControl as TreeView;
tv.Nodes.Clear();
APurview frmPur;
TreeNode nodeL1;
foreach (DataRow dr in dt.Rows)
{
frmPur = new FormPurview(dr["GUID"].ToString(), dr["FormName"].ToString(), dr["FormText"].ToString(), dr["FormType"].ToString());
nodeL1 = new TreeNode(frmPur.PurviewText);
nodeL1.Name = frmPur.PurviewType + frmPur.GUID;
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);
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Debug("向树控件初始化加载控件级权限");
DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("控件级权限加载 缺少权限树形控件...");
return;
}
DbHelper dbhelper = NewDbHelper(basRolePurviewControl.DesignSource);
if (dbhelper == null)
{
return;
}
dbhelper.ClearParameter();
dbhelper.CommandType = CommandType.Text;
if (Mesnac.Basic.UserInfo.Instance.RoleGUID == "-99")
{
dbhelper.CommandText = "SELECT * FROM BasFormFunction WHERE DeleteFlag='0' ORDER BY FunctionText";
}
else
{
// dbhelper.CommandText = @"select TA.* from BasFormFunction TA
// inner join BasRolePermission TB on TA.GUID = TB.PermissionItemGUID
// where TA.DeleteFlag='0' and TB.RoleGUID = @RoleGUID
// order by TA.FunctionText";
dbhelper.CommandText = @"select TA.* from BasFormFunction TA
inner join BasInitPermission TB on TA.GUID = TB.PermissionItemGUID
where TA.DeleteFlag='0'
order by TA.FunctionText";
dbhelper.AddParameter("@RoleGUID", Mesnac.Basic.UserInfo.Instance.RoleGUID);
}
DataTable dt = dbhelper.ToDataTable();
if (dt == null)
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("控件级权限加载 信息加载失败...");
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("FormGUID='" + formPur.GUID + "'"))
{
funcPur = new FunctionPurview(dr["GUID"].ToString(), dr["FunctionName"].ToString(), dr["FunctionText"].ToString(), dr["FunctionType"].ToString());
nodeL2 = new TreeNode(funcPur.PurviewText);
nodeL2.Tag = funcPur;
nodeL2.Name = funcPur.PurviewType + funcPur.GUID;
nodeL1.Nodes.Add(nodeL2);
}
}
}
}
/// <summary>
/// 初始化勾选角色的权限信息
/// 创建人:郑立兵
/// 创建时间2013-7-29
/// 说明:根据角色的权限信息勾选权限树形控件
/// </summary>
public class InitPurview : DatabaseAction, IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Debug("在树控件中初始化勾选已有权限");
if (UserInfo.Instance.RoleGUID.Equals("-1") && UserInfo.MustLogin)
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("权限树初始化勾选 用户未登录");
return;
}
if (UserInfo.Instance.RoleGUID.Equals("-99"))
{
Control btnLoadPermission = this.GetControlById("btnLoadPermission");
Control btnSaveInitPermission = this.GetControlById("btnSaveInitPermission");
if (btnLoadPermission != null)
{
btnLoadPermission.Enabled = true;
btnLoadPermission.Visible = true;
}
if (btnSaveInitPermission != null)
{
btnSaveInitPermission.Enabled = true;
btnSaveInitPermission.Visible = true;
}
}
DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault();
DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("权限树初始化勾选 缺少角色组合框控件...");
return;
}
if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("权限树初始化勾选 缺少权限树形控件...");
return;
}
ListControl listCtrl = basRoleControl.BaseControl as ListControl;
TreeView tv = basRolePurviewControl.BaseControl as TreeView;
string roleGUID = 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 BasRolePermission WHERE RoleGUID='{0}';", roleGUID);
DataTable dt = dbhelper.ToDataTable();
if (dt == null)
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("权限树初始化勾选 角色的权限信息加载失败...");
return;
}
ClearTreeNodes(tv.Nodes);
foreach (DataRow dr in dt.Rows)
{
CheckTreeNode(tv.Nodes, dr["PermissionType"].ToString() + dr["PermissionItemGUID"].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>
/// 保存初始化权限
/// </summary>
public class SaveInitPurview : DatabaseAction, IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Debug("保存初始化权限");
//if (UserInfo.Instance.RoleGUID.Equals("-1") && UserInfo.MustLogin)
//{
// ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存初始化权限 用户未登录");
// return;
//}
if (!UserInfo.Instance.RoleGUID.Equals("-99"))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存初始化权限 不是开发者账号!");
return;
}
DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault();
DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存角色权限 缺少角色组合框控件...");
return;
}
if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存角色权限 缺少权限树形控件...");
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;
}
ClearInitPermission(dbhelper);
SaveInitPermission(dbhelper, tv.Nodes);
string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_Default_Purview_SavePurview_msg1")); //信息保存完毕!
ShowMsg(msg1);
}
#region 初始权限
/// <summary>
/// 清空初始权限
/// </summary>
/// <param name="dbHelper"></param>
private void ClearInitPermission(DbHelper dbHelper)
{
string sqlstr = "truncate table BasInitPermission";
dbHelper.CommandText = sqlstr;
dbHelper.ClearParameter();
dbHelper.ExecuteNonQuery();
}
/// <summary>
/// 保存初始权限(超级用户调用)
/// </summary>
/// <param name="dbHelper"></param>
/// <param name="tnc"></param>
private void SaveInitPermission(DbHelper dbHelper, TreeNodeCollection tnc)
{
foreach (TreeNode n in tnc)
{
if (n.Checked)
{
string sqlstr = "insert into BasInitPermission(GUID,PermissionItemGUID,PermissionType) values(@GUID,@PermissionItemGUID,@PermissionType)";
dbHelper.CommandText = sqlstr;
dbHelper.ClearParameter();
APurview aPurview = n.Tag as APurview;
dbHelper.AddParameter("@GUID", System.Guid.NewGuid().ToString().ToUpper());
dbHelper.AddParameter("@PermissionItemGUID", aPurview.GUID);
dbHelper.AddParameter("@PermissionType", aPurview.PurviewType);
dbHelper.ExecuteNonQuery();
}
if (n.Nodes != null)
{
SaveInitPermission(dbHelper, n.Nodes);
}
}
}
#endregion
}
/// <summary>
/// 保存角色的权限信息
/// 创建人:郑立兵
/// 创建时间2013-7-29
/// 说明:根据角色的权限信息勾选权限树形控件
/// </summary>
public class SavePurview : DatabaseAction, IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Debug("执行给某角色分配保存权限");
if (UserInfo.Instance.RoleGUID.Equals("-1") && UserInfo.MustLogin)
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存角色权限 用户未登录");
return;
}
DbMCControl basRoleControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRole").FirstOrDefault();
DbMCControl basRolePurviewControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "BasRolePermission").FirstOrDefault();
if (basRoleControl == null || !basRoleControl.BaseControl.GetType().IsSubclassOf(typeof(ListControl)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存角色权限 缺少角色组合框控件...");
return;
}
if (basRolePurviewControl == null || !basRolePurviewControl.BaseControl.GetType().IsSubclassOf(typeof(TreeView)))
{
ICSharpCode.Core.LoggingService<LoadFunctionPurview>.Warn("保存角色权限 缺少权限树形控件...");
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);
string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_Default_Purview_SavePurview_msg1")); //信息保存完毕!
ShowMsg(msg1);
}
private void save(DbHelper dbhelper, TreeNodeCollection tnc, string roleGUID)
{
foreach (TreeNode n in tnc)
{
if (n.Checked)
{
insert(dbhelper, n.Tag as APurview, roleGUID);
}
else
{
delete(dbhelper, n.Tag as APurview, roleGUID);
}
if (n.Nodes != null)
{
save(dbhelper, n.Nodes, roleGUID);
}
}
}
private void insert(DbHelper dbhelper, APurview aPurview, string roleGUID)
{
if (aPurview == null)
return;
StringBuilder sb = new StringBuilder();
sb.AppendLine("IF NOT EXISTS(SELECT * FROM BasRolePermission WHERE RoleGUID=@RoleGUID AND PermissionItemGUID=@PermissionItemGUID AND PermissionType=@PermissionType)");
sb.AppendLine("INSERT INTO BasRolePermission(GUID,RoleGUID,PermissionItemGUID,PermissionType)");
sb.AppendLine("VALUES(NEWID(),@RoleGUID,@PermissionItemGUID,@PermissionType)");
dbhelper.ClearParameter();
dbhelper.CommandType = CommandType.Text;
dbhelper.CommandText = sb.ToString();
dbhelper.AddParameter("@RoleGUID", roleGUID);
dbhelper.AddParameter("@PermissionItemGUID", aPurview.GUID);
dbhelper.AddParameter("@PermissionType", aPurview.PurviewType);
dbhelper.ExecuteNonQuery();
}
private void delete(DbHelper dbhelper, APurview aPurview, string roleGUID)
{
if (aPurview == null)
return;
dbhelper.ClearParameter();
dbhelper.CommandType = CommandType.Text;
dbhelper.CommandText = "DELETE FROM BasRolePermission WHERE RoleGUID=@RoleGUID AND PermissionItemGUID=@PermissionItemGUID AND PermissionType=@PermissionType";
dbhelper.AddParameter("@RoleGUID", roleGUID);
dbhelper.AddParameter("@PermissionItemGUID", aPurview.GUID);
dbhelper.AddParameter("@PermissionType", aPurview.PurviewType);
dbhelper.ExecuteNonQuery();
}
}
}