From 8c05e7df5718201b61965fa0b746b03ce656d077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E4=B8=AB=E8=AE=B2=E6=A2=B5?= Date: Thu, 9 Mar 2023 19:35:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E9=99=86=E4=B9=8B=E5=90=8E=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=9C=AA=E8=83=BD=E6=AD=A3=E5=B8=B8=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=20(#166)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-image.yml | 25 +++++++++++------------ controller/menu_controller.go | 16 +++++++-------- logic/menu_logic.go | 32 +++++++++++++++++++++++++++++- model/request/group_req.go | 2 +- model/request/menu_req.go | 5 +++++ public/common/init_mysql_data.go | 20 ++++++++----------- routes/menu_routes.go | 2 +- 7 files changed, 66 insertions(+), 36 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 6bdf0a6..bc112c4 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -7,6 +7,8 @@ on: push: branches: - main + release: + types: [created,published] # 表示在创建新的 Release 时触发 # Allows you to run this workflow manually from the Actions tab # 可以手动触发 @@ -24,38 +26,35 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - - name: Get current date - id: date - run: echo "::set-output name=today::$(date +'%Y-%m-%d_%H-%M')" + - name: Inject slug/short variables + uses: rlespinasse/github-slug-action@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Available platforms run: echo ${{ steps.buildx.outputs.platforms }} - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile # 所需要的体系结构,可以在 Available platforms 步骤中获取所有的可用架构 - platforms: linux/amd64,linux/arm64/v8 - # 镜像推送时间 - push: ${{ github.event_name != 'pull_request' }} + platforms: linux/arm64,linux/amd64 # 给清单打上多个标签 tags: | - eryajf/go-ldap-admin-server:${{ steps.date.outputs.today }} - eryajf/go-ldap-admin-server:latest \ No newline at end of file + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.GITHUB_REPOSITORY_NAME_PART }}:latest + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.GITHUB_REPOSITORY_NAME_PART }}:${{ env.GITHUB_REF_NAME }} \ No newline at end of file diff --git a/controller/menu_controller.go b/controller/menu_controller.go index 9707395..5e68a10 100644 --- a/controller/menu_controller.go +++ b/controller/menu_controller.go @@ -9,14 +9,6 @@ import ( type MenuController struct{} -// // List 记录列表 -// func (m *MenuController) List(c *gin.Context) { -// req := new(request.MenuListReq) -// Run(c, req, func() (interface{}, interface{}) { -// return logic.Menu.List(c, req) -// }) -// } - // GetTree 菜单树 func (m *MenuController) GetTree(c *gin.Context) { req := new(request.MenuGetTreeReq) @@ -25,6 +17,14 @@ func (m *MenuController) GetTree(c *gin.Context) { }) } +// GetUserMenuTreeByUserId 获取用户菜单树 +func (m *MenuController) GetAccessTree(c *gin.Context) { + req := new(request.MenuGetAccessTreeReq) + Run(c, req, func() (interface{}, interface{}) { + return logic.Menu.GetAccessTree(c, req) + }) +} + // Add 新建 func (m *MenuController) Add(c *gin.Context) { req := new(request.MenuAddReq) diff --git a/logic/menu_logic.go b/logic/menu_logic.go index 973ed2f..9eb4dec 100644 --- a/logic/menu_logic.go +++ b/logic/menu_logic.go @@ -168,7 +168,6 @@ func (l MenuLogic) GetTree(c *gin.Context, req interface{}) (data interface{}, r return nil, ReqAssertErr } _ = c - menus, err := isql.Menu.List() if err != nil { return nil, tools.NewMySqlError(fmt.Errorf("获取资源列表失败: " + err.Error())) @@ -178,3 +177,34 @@ func (l MenuLogic) GetTree(c *gin.Context, req interface{}) (data interface{}, r return tree, nil } + +// GetAccessTree 获取用户菜单树 +func (l MenuLogic) GetAccessTree(c *gin.Context, req interface{}) (data interface{}, rspError interface{}) { + r, ok := req.(*request.MenuGetAccessTreeReq) + if !ok { + return nil, ReqAssertErr + } + _ = c + // 校验 + filter := tools.H{"id": r.ID} + if !isql.User.Exist(filter) { + return nil, tools.NewValidatorError(fmt.Errorf("该用户不存在")) + } + user := new(model.User) + err := isql.User.Find(filter, user) + if err != nil { + return nil, tools.NewMySqlError(fmt.Errorf("在MySQL查询用户失败: " + err.Error())) + } + var roleIds []uint + for _, role := range user.Roles { + roleIds = append(roleIds, role.ID) + } + menus, err := isql.Menu.ListUserMenus(roleIds) + if err != nil { + return nil, tools.NewMySqlError(fmt.Errorf("获取资源列表失败: " + err.Error())) + } + + tree := isql.GenMenuTree(0, menus) + + return tree, nil +} diff --git a/model/request/group_req.go b/model/request/group_req.go index ba845c3..da486ef 100644 --- a/model/request/group_req.go +++ b/model/request/group_req.go @@ -6,7 +6,7 @@ type GroupListReq struct { Remark string `json:"remark" form:"remark"` PageNum int `json:"pageNum" form:"pageNum"` PageSize int `json:"pageSize" form:"pageSize"` - SyncState uint `json:"syncState" form:"syncState" ` + SyncState uint `json:"syncState" form:"syncState"` } // GroupListAllReq 获取资源列表结构体,不分页 diff --git a/model/request/menu_req.go b/model/request/menu_req.go index 1c9bc65..3c1dca5 100644 --- a/model/request/menu_req.go +++ b/model/request/menu_req.go @@ -49,3 +49,8 @@ type MenuDeleteReq struct { // MenuGetTreeReq 获取菜单树结构体 type MenuGetTreeReq struct { } + +// MenuGetAccessTreeReq 获取用户菜单树 +type MenuGetAccessTreeReq struct { + ID uint `json:"id" form:"id"` +} diff --git a/public/common/init_mysql_data.go b/public/common/init_mysql_data.go index d4cff25..efea2bd 100644 --- a/public/common/init_mysql_data.go +++ b/public/common/init_mysql_data.go @@ -543,6 +543,13 @@ func InitData() { Remark: "获取菜单树", Creator: "系统", }, + { + Method: "GET", + Path: "/menu/access/tree", + Category: "menu", + Remark: "获取用户菜单树", + Creator: "系统", + }, { Method: "POST", Path: "/menu/add", @@ -667,19 +674,8 @@ func InitData() { "/base/changePwd", "/base/dashboard", "/user/info", - "/user/list", "/user/changePwd", - "/group/list", - "/group/tree", - "/group/useringroup", - "/group/usernoingroup", - "/role/list", - "/role/getmenulist", - "/role/getapilist", - "/menu/tree", - "/menu/list", - "/api/list", - "/api/tree", + "/menu/access/tree", "/log/operation/list", } diff --git a/routes/menu_routes.go b/routes/menu_routes.go index 3101c24..003aba9 100644 --- a/routes/menu_routes.go +++ b/routes/menu_routes.go @@ -16,7 +16,7 @@ func InitMenuRoutes(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) gi menu.Use(middleware.CasbinMiddleware()) { menu.GET("/tree", controller.Menu.GetTree) - // menu.GET("/list", controller.Menu.List) + menu.GET("/access/tree", controller.Menu.GetAccessTree) menu.POST("/add", controller.Menu.Add) menu.POST("/update", controller.Menu.Update) menu.POST("/delete", controller.Menu.Delete)