Ted's Blog



Golang 权限树状结构处理


实例使用的是Beego框架 


直接上代码: 总共分 3步


第一步:定义 “树” 结构体

// 用来处理数据库数据
type AuthPermission struct {
   Id int
   Title string
   Pid int
   Level int
   Status int
   Route string
   IsShow int
   IsDel int
   CreatedAt time.Time
   UpdatedAt time.Time
}

// 用于处理树结构
type AuthPermissionTree struct {
   Id int
   Title string
   Pid int
   Level int
   Status int
   Route string
   IsShow int
   IsDel int
   CreatedAt time.Time
   UpdatedAt time.Time
   Child [] *AuthPermissionTree
}


第二步:查询数据调用方法

//查询数据
permissionList := [] *models.AuthPermission{}
this.o.QueryTable( new(models.AuthPermission).TableName() ).Filter("IsShow",1).All(&permissionList)

// 调用生成树状结构数据的方法
permissionListTree, _ := util.NodeDataMerge(permissionList,41)

//打印Json
//this.Data["json"] = permissionListTree
//this.ServeJSON()
//return

// 赋值给模版
this.Data["navList"] = permissionListTree
this.TplName = this.controllerName + "/main.html"


第三步:处理树状结构方法

// 合并权限节点数据 递归返回树状结构  参考:https://blog.csdn.net/qq_15418761/article/details/81217146
func NodeDataMerge(nodeList [] *models.AuthPermission, pid int)  (dataList [] *models.AuthPermissionTree, err error) {


   // 遍历每一个节点
   for _, v := range nodeList {


      // 当前节点的Pid 如果 等于 pid 那么就说明他有子集
      if v.Pid == pid {

         // 通过递归查询子节点
         children, _ := NodeDataMerge(nodeList, v.Id)

         // 定义当前节点数据 并且 合并子节点
         parent := models.AuthPermissionTree{Id:v.Id, Title:v.Title, Pid:v.Pid, Level:v.Level, Status:v.Status, Route:v.Route, IsShow:v.IsShow, Child: children}

         // 将当前节点 合并 到结果集
         dataList = append(dataList, &parent)
      }
   }

   return dataList, nil

}



Github 代码 https://github.com/tebie6/go_demo

分享:

写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn