当前位置:编程学习 > C#/ASP.NET >>

treeview节点权限分配问题

怎样实现对不同角色的用户登录,显示不同的treeview节点导航? --------------------编程问答-------------------- 做项目时,也遇到这个问题。同问,帮顶 --------------------编程问答-------------------- 通过角色获取相关权限
创建treenode添加到treeview.判断用户是否有权限,设置checkbox为true
--------------------编程问答--------------------
引用 2 楼 wuyq11 的回复:
通过角色获取相关权限
创建treenode添加到treeview.判断用户是否有权限,设置checkbox为true


学习~~~ --------------------编程问答-------------------- 其实方法是有的,就是用一个事件根据用户类型来判断一下,然后动态生成不同的树:(不同用户类型生成不同的树),但感觉效率不高 --------------------编程问答--------------------
引用 2 楼 wuyq11 的回复:
通过角色获取相关权限
创建treenode添加到treeview.判断用户是否有权限,设置checkbox为true

有点抽象,不是很懂;可以详细一点吗? --------------------编程问答-------------------- 加载treenode时,检查到checkbox为true的就让它用
--------------------编程问答-------------------- 一般都是数据库中存储了每个角色可以访问的权限,即:可访问的treenode结点
从数据库中取到可访问的treenode结点
后台添加到treeview上就行了
--------------------编程问答--------------------  一种办法,让所有的都显示出来,然后根据 相应的权限隐藏一部分,第二种,就是,先判断权限,再加载 --------------------编程问答--------------------  protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] != null)
        {
            //得到用户信息
            UserInfo user = (UserInfo)Session["user"];
            DisplayUserMenu(user);
        }
    }

    protected void DisplayUserMenu(UserInfo user)
    {
        TVSysFun.Nodes.Clear();
        IList<SysFun> parentSysFun = SysFunManager.GetAllParentNodeInfoByUserId(user);
        foreach (SysFun sfParent in parentSysFun)
        {
            string nodeId = sfParent.NodeId.ToString();//第一层节点id
            string displayName = sfParent.DisplayName;//第一层节点显示名称

            TreeNode fatherNode = this.CreatTreeNode(displayName, nodeId, "", "Images/tree/folder_closed.gif");//根据节点信息,创建第一层节点

            CreateChildTree(nodeId, user, fatherNode);//创建子节点

            TVSysFun.Nodes.Add(fatherNode);//将第一层节点加入到用户权限TreeView中
        }

    }

    //创建第二层节点
    private void CreateChildTree(string nodeId, UserInfo user, TreeNode fatherNode)
    {
        IList<SysFun> childSysFun = SysFunManager.GetSysFunByParentNodeIdAndUserId(user,  int.Parse(nodeId));//获得父节点为nodeId的所有子节点

        foreach (SysFun sfChild in childSysFun)
        {
            string childNodeId = sfChild.NodeId.ToString();//第二层节点id
            string childDisplayName = sfChild.DisplayName;//第二层节点名称
            string nodeURL = ResolveUrl(sfChild.NodeURL.Trim());//将路径转换为在客户端可用的URL

            TreeNode childNode = this.CreatTreeNode(childDisplayName, childNodeId, nodeURL, "Images/tree/folder_open.gif");//根据节点信息,创建第二层节点
            AddTree(fatherNode, childNode);//将子节点加入到父节点中
        }
    }


    /// <summary>
    /// 创建一个树节点,返回一个树节点对象,参数内容是:
    /// 节点名称,节点ID,链接地址,正常图标,展开后的图标
    /// </summary>
    private TreeNode CreatTreeNode(string strText, string strId, string strUrl, string strImg)
    {
        TreeNode newNode = new TreeNode();
        newNode.Text = strText;
        newNode.Value = strId;
        newNode.NavigateUrl = strUrl;
        newNode.ImageUrl = strImg;
        return newNode;
    }

    /// <summary>
    /// 把子节点添加到父节点当中
    /// </summary>
    private void AddTree(TreeNode FatherNode, TreeNode ChildNode)
    {
        FatherNode.ChildNodes.Add(ChildNode);
    }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,