treeview--- web方式下权限分配简单实现

目前项目涉及到权限分配问题,相信很多高手都已经知道了,本人刚开始学习web开发,做这个权限管理的功能时候遇到很多问题,在这里写下这篇文章之想给学习web开发的新手们起到一个抛砖引玉的作用,同时希望得到高手们的指点。
   

大概设想:

       权限到菜单,当我们用不同用户进入系统时,我们给他不同的菜单(或叫导航条)。
    用
user表存储用户相关信息,role表存储角色信息,包含权限。权限使用xml文件存储。

数据字典

USER

字段名

中文名

类型

备注

UserID

用户ID

NUMER(7)

主键,自增长

UserName

用户名

VarChar2(20)

 

DepartmentID

所属部门ID

NUMER(7)

 

RoleID

角色ID

NUMER(3)

 

 

ROLE

字段名

中文名

类型

备注

RoleID

角色ID

NUMER(3)

主键,自增长

RoleName

角色名

VarChar2(20)

 

Popedom

权限

VarChar2(255)

存储权限文件



     使用技术:
      1、XML,采用xml文件存储菜单内容。
      2、微软ie控件treeview 

   第一步 安装控件,并写好xml文件:
      相信你们都没有安装IE Web Controls。这么我们就开始安装这个。
         1、点击 下载控件,这可是免费,且有源码的。
         2、安装控件。网络上有很多安装使用方法,在这里就不重复了。如果你不清楚请参阅:
                http://www.microsoft.com/china/msdn/archives/library/dnaspp/html/aspnet-usingtreeviewiewebcontrol.asp#aspnet-usingtreeviewiewebcontrol_topic5
         3、将控件加入vs中。
         4、写XML文件,文件如下:

<? xml version="1.0" encoding="utf-8"  ?>
< TREENODES >
    
< treenode  text ="首页"  NavigateUrl ="Main.aspx"  Target ="mainFrame" >
        
< treenode  text ="登入系统"  NavigateUrl ="Authentication/Login.aspx"  Target ="mainFrame"   />
    
</ treenode >
    
< treenode  text ="权限管理"  NavigateUrl ="Main.aspx"  Target ="mainFrame" >
    
</ treenode >
</ TREENODES >
         在这里解释一下: NavigateUrl为链接页; Target为:在那个框架显示。我们做两个XML文件,一个命名为“管理员.xml”,另外一个为:“游客.xml”  。


      第二步 放置控件。并写好后台代码:
         1、放置控件,在aspx文件你想要控件出现位置添加下面语句:
< iewc:TreeView  id ="trvMenu"  runat ="server"  Expanded ="True" ></ iewc:TreeView >
         2、后台代码中添加下面语句。注意,我们假设已经将用户所属权限存储文件和id取到Session对象中。
         private   void  Page_Load( object  sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
            if (Session["LogonUserId"== null )
            
{
                Session[
"LogonUserId"=  0;
                  Session["LogonUserName"]  = "游客";
                Session[
"LogonUserRole"]  = "游客.xml";
            }

    
this.trvMenu.TreeNodeSrc="Authentication/XMLFiles/"+ Session["LogonUserRole"].ToString();
            
this.trvMenu.DataBind();  
        }

 后记      
         通过上面两步,我们就将权限分配处理完毕,当我们不同的用户登入的时候,我们重载一次这个导航页面即可,因为我们使用的是框架,用户不知道调用那个页面, 而且我们系统应用对象为大型企业,系统主要也是完成查询功能。所以可以考虑不需要在每个页面中校验身份。
        
        本文限于大家交流技术,请勿使用商业用途,谢谢!希望能与你们交流,我的msn: pfengk@hotmail.com 
                                                                                                                            作者:pfengk
                                                                                                                           2005.7.1 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果调用`treeView->setModel(index.model())`报错,可能是因为缺少`QTreeView`的模型。你可以在创建`QTreeView`时,同时创建一个空的`QStandardItemModel`,在`setEditorData()`方法将`QStandardItemModel`设置为`QTreeView`的模型。 修改后的代码如下所示: ```cpp class TreeDelegate : public QStyledItemDelegate { public: QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override { QTreeView* treeView = new QTreeView(parent); treeView->setModel(new QStandardItemModel(treeView)); return treeView; } void setEditorData(QWidget* editor, const QModelIndex& index) const override { QTreeView* treeView = static_cast<QTreeView*>(editor); QStandardItemModel* model = static_cast<QStandardItemModel*>(treeView->model()); model->clear(); // 清空模型的数据 treeView->setRootIndex(index); treeView->expandAll(); } void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override { QTreeView* treeView = static_cast<QTreeView*>(editor); QModelIndexList selectionList = treeView->selectionModel()->selectedIndexes(); QModelIndex selectionIndex = selectionList.at(0); QVariant data = selectionIndex.data(Qt::DisplayRole); model->setData(index, data); } void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override { editor->setGeometry(option.rect); } }; ``` 在`createEditor()`方法,同时创建了一个空的`QStandardItemModel`并将其设置为`QTreeView`的模型。 在`setEditorData()`方法,每次调用该方法时先清空模型的数据,再将根索引设置为传入的索引,并展开所有项。 这样就可以避免`treeView->setModel(index.model())`报错了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值