zoukankan      html  css  js  c++  java
  • 用户权限树的建立及递归算法思路原则

    *********权限思路:先把所有权限加载到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();
        }

  • 相关阅读:
    水晶报表 注册码
    黑马孕育期盘口的技术辨识(转贴)
    如何判断庄家出货(转贴)
    解决方案:用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
    水晶报表学习资料
    (网上收集)asp.net页面打印问题?
    arcgis地理配准第二种方法:利用已知控制点 (Spatial Adjustment和Georeferencing的区别)
    Vue父子组件之间通信
    Vue怎么引用组件和使用组件?
    ESLint:error 'reject' is defined but never used nounusedvars
  • 原文地址:https://www.cnblogs.com/yingger/p/2754365.html
Copyright © 2011-2022 走看看