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();
        }

  • 相关阅读:
    深入浅出设计模式【转载】
    将EXCEL数据入ACCESS
    SFDC中的DEBUG
    2017新开始
    js获取窗体大小
    VS2005和VS2008快捷键大全
    Office云平台性能测试人员,全国火热征集中
    JQuery设置cookie|JQuery删除cookie|JQuery获取cookie 过期
    xpath操作xml
    Aptana中的中文显示乱码问题 .
  • 原文地址:https://www.cnblogs.com/yingger/p/2754365.html
Copyright © 2011-2022 走看看