TreeView实现权限管理

这几天一直都在想这个事情,昨天用了一天时间实现了权限管理的设计,今天完善了下代码。
我的数据库设计分为如下四个数据库:
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

我通过权限的ID-->获取关系表里面moduleid---->通过moduleid获取数据库表里面的modulename
----->再将读取的module数据添加到treeview里面。
附加上源码http://files.cnblogs.com/itgmhujia/Mag_Role.rar
    

转载于:https://www.cnblogs.com/itgmhujia/archive/2008/03/26/1122877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值