416 lines
14 KiB
C#
416 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
|
|
namespace FineUIPro.Web.common.SysManage
|
|
{
|
|
public partial class RolePower : PageBase
|
|
{
|
|
/// <summary>
|
|
/// 角色主键
|
|
/// </summary>
|
|
public string RoleId
|
|
{
|
|
get
|
|
{
|
|
return (string)ViewState["RoleId"];
|
|
}
|
|
set
|
|
{
|
|
ViewState["RoleId"] = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// MenuModule
|
|
/// </summary>
|
|
public string MenuModuleId
|
|
{
|
|
get
|
|
{
|
|
return (string)ViewState["MenuModuleId"];
|
|
}
|
|
set
|
|
{
|
|
ViewState["MenuModuleId"] = value;
|
|
}
|
|
}
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!IsPostBack)
|
|
{
|
|
////加载角色树
|
|
this.InitRoleTree();
|
|
///加载菜单树
|
|
this.InitSystemTree();
|
|
this.InitMenuTree();
|
|
}
|
|
}
|
|
|
|
|
|
#region 初始化角色树
|
|
/// <summary>
|
|
/// 初始化树
|
|
/// </summary>
|
|
private void InitRoleTree()
|
|
{
|
|
this.tvRole.Nodes.Clear();
|
|
|
|
TreeNode rootNode = new TreeNode();//定义根节点
|
|
rootNode.Text = "角色";
|
|
rootNode.NodeID = "0";
|
|
rootNode.Expanded = true;
|
|
this.tvRole.Nodes.Add(rootNode);
|
|
|
|
var role = from x in BLL.Funs.DB.Sys_Role orderby x.RoleName select x;
|
|
foreach (var q in role)
|
|
{
|
|
TreeNode roleNode = new TreeNode();
|
|
roleNode.Text = q.RoleName;
|
|
roleNode.NodeID = q.RoleId;
|
|
roleNode.Expanded = true;
|
|
roleNode.EnableClickEvent = true;
|
|
rootNode.Nodes.Add(roleNode);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 加载系统树:动态加载
|
|
/// </summary>
|
|
private void InitSystemTree()
|
|
{
|
|
this.tvSystem.Nodes.Clear();
|
|
|
|
TreeNode rootNode = new TreeNode();//定义根节点
|
|
rootNode.Text = "综合平台";
|
|
rootNode.NodeID = "100";
|
|
rootNode.Expanded = true;
|
|
this.tvSystem.Nodes.Add(rootNode);
|
|
this.GetSystemTreeNodes(rootNode.Nodes, BLL.Const.SystemType_0);
|
|
|
|
TreeNode rootNode1 = new TreeNode();//定义根节点
|
|
rootNode1.Text = "项目现场施工管理";
|
|
rootNode1.NodeID = "101";
|
|
rootNode1.Expanded = true;
|
|
this.tvSystem.Nodes.Add(rootNode1);
|
|
this.GetSystemTreeNodes(rootNode1.Nodes, BLL.Const.SystemType_1);
|
|
|
|
//TreeNode rootNode2 = new TreeNode();//定义根节点
|
|
//rootNode2.Text = "施工综合管理";
|
|
//rootNode2.NodeID = "102";
|
|
//rootNode2.Expanded = true;
|
|
//this.tvSystem.Nodes.Add(rootNode2);
|
|
//this.GetSystemTreeNodes(rootNode2.Nodes, BLL.Const.SystemType_2);
|
|
}
|
|
|
|
|
|
#region 遍历节点方法(施工综合管理)
|
|
/// <summary>
|
|
/// 遍历节点方法
|
|
/// </summary>
|
|
/// <param name="nodes">节点集合</param>
|
|
/// <param name="parentId">父节点</param>
|
|
private void GetSystemTreeNodes(TreeNodeCollection nodes, string systemType)
|
|
{
|
|
var system = from x in BLL.Funs.DB.Sys_System
|
|
where x.SystemType == systemType && x.IsEnable == true
|
|
orderby x.SorIndex
|
|
select x;
|
|
foreach (var q in system)
|
|
{
|
|
TreeNode newNode = new TreeNode();
|
|
newNode.Text = q.SystemName;
|
|
newNode.NodeID = q.SystemId;
|
|
newNode.Expanded = true;
|
|
newNode.EnableClickEvent = true;
|
|
nodes.Add(newNode);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 加载菜单树:动态加载
|
|
/// </summary>
|
|
private void InitMenuTree()
|
|
{
|
|
this.tvMenu.Nodes.Clear();
|
|
TreeNode rootNode = new TreeNode();//定义根节点
|
|
rootNode.Text = "系统功能";
|
|
rootNode.NodeID = "0";
|
|
rootNode.Expanded = true;
|
|
rootNode.EnableCheckBox = true;
|
|
this.tvMenu.Nodes.Add(rootNode);
|
|
// this.GetNodes(rootNode.ChildNodes, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载菜单树:动态加载
|
|
/// </summary>
|
|
private void MenuBindDataBySystem(string systemId)
|
|
{
|
|
this.tvMenu.Nodes.Clear();
|
|
TreeNode rootNode = new TreeNode();//定义根节点
|
|
rootNode.Text = "系统功能";
|
|
rootNode.NodeID = "0";
|
|
rootNode.Expanded = true;
|
|
rootNode.EnableCheckBox = true;
|
|
rootNode.EnableCheckEvent = true;
|
|
this.tvMenu.Nodes.Add(rootNode);
|
|
this.GetNodes(rootNode.Nodes, null, systemId);
|
|
}
|
|
|
|
#region 遍历节点方法(系统功能)
|
|
/// <summary>
|
|
/// 遍历节点方法
|
|
/// </summary>
|
|
/// <param name="nodes">节点集合</param>
|
|
/// <param name="parentId">父节点</param>
|
|
private void GetNodes(TreeNodeCollection nodes, string parentId, string systemId)
|
|
{
|
|
List<Model.Sys_Menu> menu = null;
|
|
if (parentId == null)
|
|
{
|
|
menu = (from x in BLL.Funs.DB.Sys_Menu where x.SuperMenu == "0" && x.MenuModule == systemId orderby x.SortIndex select x).ToList();
|
|
}
|
|
else
|
|
{
|
|
menu = (from x in BLL.Funs.DB.Sys_Menu where x.SuperMenu == parentId orderby x.SortIndex select x).ToList();
|
|
}
|
|
|
|
foreach (var q in menu)
|
|
{
|
|
TreeNode newNode = new TreeNode();
|
|
newNode.Text = q.MenuName;
|
|
newNode.NodeID = q.MenuId;
|
|
newNode.EnableCheckEvent = true;
|
|
newNode.EnableCheckBox = true;
|
|
newNode.Selectable = true;
|
|
nodes.Add(newNode);
|
|
|
|
if (q.SuperMenu != "0")
|
|
{
|
|
var buttons = (from x in BLL.Funs.DB.ButtonToMenu where x.MenuId == q.MenuId orderby x.SortIndex select x).ToList();
|
|
foreach (var b in buttons)
|
|
{
|
|
TreeNode bt = new TreeNode();
|
|
bt.Text = b.ButtonName;
|
|
bt.NodeID = b.ButtonToMenuId;
|
|
bt.EnableCheckEvent = true;
|
|
bt.EnableCheckBox = true;
|
|
bt.Selectable = true;
|
|
newNode.Nodes.Add(bt);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < nodes.Count; i++)
|
|
{
|
|
GetNodes(nodes[i].Nodes, nodes[i].NodeID, systemId);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 全选、全不选
|
|
/// <summary>
|
|
/// 全选、全不选
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void tvMenu_NodeCheck(object sender, FineUIPro.TreeCheckEventArgs e)
|
|
{
|
|
if (e.Checked)
|
|
{
|
|
this.tvMenu.CheckAllNodes(e.Node.Nodes);
|
|
SetCheckParentNode(e.Node);
|
|
}
|
|
else
|
|
{
|
|
this.tvMenu.UncheckAllNodes(e.Node.Nodes);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 选中父节点
|
|
/// </summary>
|
|
/// <param name="node"></param>
|
|
private void SetCheckParentNode(TreeNode node)
|
|
{
|
|
if (node.ParentNode != null && node.ParentNode.NodeID != "0")
|
|
{
|
|
node.ParentNode.Checked = true;
|
|
if (node.ParentNode.ParentNode.NodeID != "0")
|
|
{
|
|
SetCheckParentNode(node.ParentNode);
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 角色树节点选择
|
|
/// <summary>
|
|
/// 树节点选择
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void tvRole_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e)
|
|
{
|
|
RoleId = this.tvRole.SelectedNode.NodeID;
|
|
this.lbRoleId.Text = this.tvRole.SelectedNode.NodeID;
|
|
lbRoleName.Text = "角色:"+this.tvRole.SelectedNode.Text.Trim();
|
|
if (MenuModuleId != null && MenuModuleId.Length<3)
|
|
{
|
|
MenuBindDataBySystem(MenuModuleId);
|
|
this.SetPowerToMenu();
|
|
}
|
|
}
|
|
|
|
protected void tvSystem_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e)
|
|
{
|
|
MenuModuleId = this.tvSystem.SelectedNode.NodeID;
|
|
lbSystemName.Text =" 系统:"+ this.tvSystem.SelectedNode.Text.Trim();
|
|
if (MenuModuleId == BLL.Const.System_4)
|
|
{
|
|
lbSystemName.Text += "(暂未开放!)";
|
|
}
|
|
|
|
if (this.tvSystem.SelectedNode.NodeID.Length < 3)
|
|
{
|
|
MenuBindDataBySystem(MenuModuleId);
|
|
SetPowerToMenu();
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 提交按钮事件
|
|
/// <summary>
|
|
/// 提交按钮事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.RolePowerMenuId, BLL.Const.BtnSave))
|
|
{
|
|
string systemValue = this.tvSystem.SelectedNode.NodeID;
|
|
if (!String.IsNullOrEmpty(RoleId) && !string.IsNullOrEmpty(systemValue))
|
|
{
|
|
BLL.Sys_ButtonPowerService.DeleteButtonPower(RoleId, systemValue);
|
|
BLL.Sys_RolePowerService.DeleteRolePower(RoleId, systemValue);
|
|
|
|
foreach (TreeNode tn in this.tvMenu.GetCheckedNodes())
|
|
{
|
|
if (tn.NodeID != "0")
|
|
{
|
|
if (BLL.CommonService.IsExistMenu(tn.NodeID))
|
|
{
|
|
Model.Sys_RolePower newPower = new Model.Sys_RolePower();
|
|
newPower.RoleId = RoleId;
|
|
newPower.MenuId = tn.NodeID;
|
|
BLL.Sys_RolePowerService.SaveRolePower(newPower);
|
|
}
|
|
|
|
if (BLL.CommonService.isExistButtonToMenu(tn.NodeID))
|
|
{
|
|
Model.Sys_ButtonPower btn = new Model.Sys_ButtonPower();
|
|
btn.RoleId = RoleId;
|
|
btn.MenuId = tn.ParentNode.NodeID;
|
|
btn.ButtonToMenuId = tn.NodeID;
|
|
BLL.Sys_ButtonPowerService.SaveButtonPower(btn);
|
|
}
|
|
}
|
|
}
|
|
|
|
BLL.Sys_LogService.AddLog(BLL.Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, "提交角色菜单授权");
|
|
ShowNotify("提交成功!");
|
|
}
|
|
else
|
|
{
|
|
ShowNotify("请选择角色和系统!");
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
ShowNotify("您没有这个权限,请与管理员联系!");
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 取消按钮事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
if (!String.IsNullOrEmpty(RoleId))
|
|
{
|
|
string[] powerToMenuId = BLL.Sys_RolePowerService.GetMenuIdByRoleId(RoleId);
|
|
if (powerToMenuId != null)
|
|
{
|
|
GetCheckedNodes(this.tvMenu.Nodes[0].Nodes, powerToMenuId);
|
|
}
|
|
}
|
|
}
|
|
|
|
#region 设置角色对应菜单权限
|
|
/// <summary>
|
|
/// 设置角色对应菜单权限
|
|
/// </summary>
|
|
protected void SetPowerToMenu()
|
|
{
|
|
if (!String.IsNullOrEmpty(RoleId))
|
|
{
|
|
string[] powerToMenuId = BLL.Sys_RolePowerService.GetMenuIdByRoleId(RoleId);
|
|
if (powerToMenuId != null)
|
|
{
|
|
GetCheckedNodes(this.tvMenu.Nodes[0].Nodes, powerToMenuId);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 遍历获取有权限的节点
|
|
/// </summary>
|
|
/// <param name="nodes">节点集合</param>
|
|
/// <param name="power">权限集合</param>
|
|
private void GetCheckedNodes(TreeNodeCollection nodes, string[] powerToMenuId)
|
|
{
|
|
foreach (TreeNode tn in nodes)
|
|
{
|
|
tn.Checked = false;
|
|
tn.Expanded = false;
|
|
if (powerToMenuId.Contains(tn.NodeID))
|
|
{
|
|
tn.Checked = true;
|
|
tn.Expanded = true;
|
|
}
|
|
if (tn.ParentNode.NodeID != "0")
|
|
{
|
|
if (powerToMenuId.Contains(tn.ParentNode.NodeID))
|
|
{
|
|
var btpower = from x in BLL.Funs.DB.Sys_ButtonPower where x.RoleId == RoleId && x.MenuId == tn.ParentNode.NodeID select x.ButtonToMenuId;
|
|
|
|
if (btpower.Contains(tn.NodeID))
|
|
{
|
|
tn.Checked = true;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < nodes.Count; i++)
|
|
{
|
|
GetCheckedNodes(nodes[i].Nodes, powerToMenuId);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
} |