这几天一直都在想这个事情,昨天用了一天时间实现了权限管理的设计,今天完善了下代码。
我的数据库设计分为如下四个数据库:
1、user:用户表---用户的基本信息
2、role:角色表---角色设置的信息
3、module:模块表---每个页面的信息,就是显示在treeview里面的内容
4、authority:关系表---里面表示了角色和模块的关系,指示模块和角色的对应关系,每个角色能访问哪个模块等。
下面的是基本的操作数据库类:
是用动软.NET生成的。DbHelper类直接操作数据库
对每个表生成一个类,来操作数据库的添加,修改,删除等等。
当我们真正确立这些关系的时候。我们真正要理解的就应该是treeview的load事件里面的操作方式了。读取每个父节点,然后读取每个子节点。
Code
获取当前权限表#region 获取当前权限表
ROLE myrole = new ROLE();
myrole.ROLEID = Convert.ToInt16(Session["roleid"].ToString());
myrole.GetModel(myrole.ROLEID);
//获取整个表,里面包含当前所有权限的moduleid
DataSet ds = new DataSet();
Authority myauthority = new Authority();
ds = myauthority.GetList("RoleID=" + myrole.ROLEID + "");
#endregion
父节点添加#region 父节点添加
//建立int来防止fathermoduleid相同来判断并且只建立一个fathernode
int fathermoduleid = 100;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MODULE mymodule = new MODULE();
//设立查询的moduleid
mymodule.MODULEID = Convert.ToInt16(ds.Tables[0].Rows[i].ItemArray[2]);
//获取实例module
mymodule.GetModel(mymodule.MODULEID);
//查询父节点
//获取父节点编号
int Ofathernodeid = Convert.ToInt16(mymodule.MODULE_FATHERID);
//查询所有父节点的模块
MODULE fathermodule = new MODULE();
fathermodule.MODULEID = Ofathernodeid;
fathermodule.GetModel(fathermodule.MODULEID);
//查询结果中有重复取消在循环中进行判断,将重复的不执行
if (fathermoduleid != fathermodule.MODULEID)
{ //将当前查询到的父节点的id负值给Ofathernodeid
fathermoduleid = fathermodule.MODULEID;
//实例化本父节点
TreeNode FatherNode = new TreeNode(fathermodule.MODULE_NAME, fathermodule.MODULEID.ToString(), "", fathermodule.MODULE_URL, "_blank");
this.Tree_left.Nodes.Add(FatherNode);
}
}
#endregion
子节点添加#region 子节点添加
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MODULE mymodule = new MODULE();
//设立查询的moduleid
mymodule.MODULEID = Convert.ToInt16(ds.Tables[0].Rows[i].ItemArray[2]);
//获取实例module
mymodule.GetModel(mymodule.MODULEID);
//实例化本子节点
if (mymodule.MODULE_FATHERID != 0)
{
//建立子节点
TreeNode Childnode = new TreeNode(mymodule.MODULE_NAME, mymodule.MODULEID.ToString().Trim(), "", mymodule.MODULE_URL, "_blank");
//this.Tree_left.Nodes.Add(Childnode);
//遍历所有treenode查询出需要的treenode
foreach (TreeNode myfathernode in Tree_left.Nodes)
{
MODULE mymodule1 = new MODULE();
mymodule1.MODULEID = Convert.ToInt16(myfathernode.Value);
mymodule1.GetModel(mymodule1.MODULEID);
if (Convert.ToInt16(mymodule1.MODULE_FATHERID) == 0 && mymodule.MODULE_FATHERID == mymodule1.MODULEID)
{
myfathernode.ChildNodes.Add(Childnode);
}
}
}
}
#endregion
获取当前权限表#region 获取当前权限表
ROLE myrole = new ROLE();
myrole.ROLEID = Convert.ToInt16(Session["roleid"].ToString());
myrole.GetModel(myrole.ROLEID);
//获取整个表,里面包含当前所有权限的moduleid
DataSet ds = new DataSet();
Authority myauthority = new Authority();
ds = myauthority.GetList("RoleID=" + myrole.ROLEID + "");
#endregion
父节点添加#region 父节点添加
//建立int来防止fathermoduleid相同来判断并且只建立一个fathernode
int fathermoduleid = 100;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MODULE mymodule = new MODULE();
//设立查询的moduleid
mymodule.MODULEID = Convert.ToInt16(ds.Tables[0].Rows[i].ItemArray[2]);
//获取实例module
mymodule.GetModel(mymodule.MODULEID);
//查询父节点
//获取父节点编号
int Ofathernodeid = Convert.ToInt16(mymodule.MODULE_FATHERID);
//查询所有父节点的模块
MODULE fathermodule = new MODULE();
fathermodule.MODULEID = Ofathernodeid;
fathermodule.GetModel(fathermodule.MODULEID);
//查询结果中有重复取消在循环中进行判断,将重复的不执行
if (fathermoduleid != fathermodule.MODULEID)
{ //将当前查询到的父节点的id负值给Ofathernodeid
fathermoduleid = fathermodule.MODULEID;
//实例化本父节点
TreeNode FatherNode = new TreeNode(fathermodule.MODULE_NAME, fathermodule.MODULEID.ToString(), "", fathermodule.MODULE_URL, "_blank");
this.Tree_left.Nodes.Add(FatherNode);
}
}
#endregion
子节点添加#region 子节点添加
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MODULE mymodule = new MODULE();
//设立查询的moduleid
mymodule.MODULEID = Convert.ToInt16(ds.Tables[0].Rows[i].ItemArray[2]);
//获取实例module
mymodule.GetModel(mymodule.MODULEID);
//实例化本子节点
if (mymodule.MODULE_FATHERID != 0)
{
//建立子节点
TreeNode Childnode = new TreeNode(mymodule.MODULE_NAME, mymodule.MODULEID.ToString().Trim(), "", mymodule.MODULE_URL, "_blank");
//this.Tree_left.Nodes.Add(Childnode);
//遍历所有treenode查询出需要的treenode
foreach (TreeNode myfathernode in Tree_left.Nodes)
{
MODULE mymodule1 = new MODULE();
mymodule1.MODULEID = Convert.ToInt16(myfathernode.Value);
mymodule1.GetModel(mymodule1.MODULEID);
if (Convert.ToInt16(mymodule1.MODULE_FATHERID) == 0 && mymodule.MODULE_FATHERID == mymodule1.MODULEID)
{
myfathernode.ChildNodes.Add(Childnode);
}
}
}
}
#endregion
我通过权限的ID-->获取关系表里面moduleid---->通过moduleid获取数据库表里面的modulename
----->再将读取的module数据添加到treeview里面。
附加上源码http://files.cnblogs.com/itgmhujia/Mag_Role.rar