博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用户权限树的建立及递归算法思路原则
阅读量:5312 次
发布时间:2019-06-14

本文共 2296 字,大约阅读时间需要 7 分钟。

*********权限思路:先把所有权限加载到Detree树中,然后根据数据库中用户角色和功能ID,给其拥有权限打上勾。修改时提交事件更新数据库。

*******关于更改权限:先批量删除所有功能,再批量插入。

类中的递归算法思路: 如果是调用类中某数据作为参数,并反回部分有用数据的递规,则先考虑反回整个类 ,再篇历该类,调用各对像的参数数据进行递规。

      如下:权限设置中以父节点ID得到所有子节点,进而递规得到所有子节点的子节点递归。用类处理,反回类对像集合,再调集合中的各对的父节点ID进行递规。 

1.在Sys_Right权限表中得到所有一级权限菜单

            public    Ilist<Sys_Right>     GetFirstMenu()

               {

                       string   sql="select * from Sys_Right where Right_Prent_Code=0";

                      return GetSys_RightBySql(sql);

                }

     2.根据父节点ID得到所有子节点

            public      Ilist<Sys_Right>   GetSonMenuByParentID( int  ParentID)

             {

                       string   sql="select * from Sys_Right where Right_Prent_Code="+parentID.ToString();

                      return GetSys_RightBySql(sql);

             }

    3.根据父节点ID递规得到所有子节点的方法

           public    string    GetAllMenuByParentId( int  ParentID)

            {

                      stringBuilder    sb= new StringBuilder();

                      Ilist<SyS_Right>  listRight= GetSonMenuByParentID( ParentID );  //  反回类对像    

                      foreach( Sys_Right   right    in    listRight)        // 遍历类对像

                         {

                                 int flag = BLL.Sys_role_rightManager.GetCheckExistRoleRight(this.RoleId, right.Id) ? 1 : 2; // 用于判断是detre中功能是否选中 详情见4

                                 sb.AppendFormat("tree.add('{0}', '{1}', '{2}', '', '', '',{3},'{4}','{5}');", right.Id,parentId, right.Right_text,

                                           flag,this.BaseUrl+"customerImg/CloseTree.gif",this.BaseUrl+"customerImg/OpenTree.gif");

                                  sb.Append( GetAllMenuByParentId( right.Id ) );              // 递归传弟类对像中的必要参数

                         }

                       return  sb.ToString();       

             }

      4.  根据角色ID和权限Id 在角色权限表中查询该用户角色是否含有此功能

          public   bool   GetCheckExistRoleRight( int RoleID, int RightId)

             {

                  string strsql = string.Format("select count(*) from Sys_role_right where Rf_role_no={0} and Rf_right_no={1}", Roleid, RightId);

                  return DBHelper.GetScalar(strsql) > 0;            // 如果反回0  无此功能,1有此 

              }

 

  5.显示所有功能于DeTree中,并将该用户拥有的功能打上勾

       /// <summary>

      /// 得到dtree js 的主体节点代码
      /// </summary>
     /// <returns></returns>
    private string GetTreeJsBody()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        //得到所有的父节点
        IList<Models.Sys_right> rights = BLL.Sys_rightManager.GetFirstMenu();
        foreach (Models.Sys_right right in rights)
        {
            int flag = BLL.Sys_role_rightManager.GetCheckExistRoleRight(this.RoleId, right.Id) ? 1 : 2;
            sb.AppendFormat("tree.add('{0}', '0', '{1}', '', '', '',{2},'{3}','{4}');", right.Id, right.Right_text, flag, this.BaseUrl + "customerImg/CloseTree.gif", this.BaseUrl + "customerImg/OpenTree.gif");
            sb.Append(GetAllMenuByParentId(right.Id));
        }
        return sb.ToString();
    }

转载于:https://www.cnblogs.com/yingger/archive/2012/11/04/2754365.html

你可能感兴趣的文章
hdu 4737 A Bit Fun 尺取法
查看>>
使用信号量
查看>>
《数据分析实战》--第三章 python实现
查看>>
crontab command not found
查看>>
记录-springMVC访问web-inf下文件问题+在jsp页面导入jquery插件路径不对问题
查看>>
对于C语言中数组名是指针的理解
查看>>
实验八 接口与实现接口的类
查看>>
mac OSx 安装 mysqlclient
查看>>
Scala for the Impatients---(10)Traits
查看>>
简单的姓名号码查询系统
查看>>
PostgreSQL 保留关键字添加方法之一,不带参数的函数
查看>>
你的博客可能被爬了
查看>>
赛前热手 (天梯赛暴力题)
查看>>
.net 冒泡排序示例
查看>>
Uva(10330)
查看>>
vlan学习
查看>>
R-Sys.time计算程序运行时间
查看>>
Java类模板
查看>>
【转贴】SAP HANA内存数据库详解
查看>>
二分查找BinarySearch(Java)
查看>>