Vue + Golang 项目实战(七):权限菜单后端接口开发

权限数据库
# 创建权限数据库表
CREATE TABLE `permission` (
  `id` int NOT NULL COMMENT '自增id',
  `parent_id` int NOT NULL DEFAULT '0' COMMENT '父id',
  `name` char(64) NOT NULL DEFAULT '' COMMENT '名称',
  `web_router` char(200) NOT NULL DEFAULT '' COMMENT '前端路由',
  `server_router` char(200) NOT NULL DEFAULT '' COMMENT '后端api接口',
  `request_method` char(10) NOT NULL DEFAULT '' COMMENT '请求方式',
  `type` tinyint NOT NULL COMMENT '类型: 1-目录 2-菜单 3-按钮',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用 1-启用 2-禁用',
  `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  `update_date` datetime DEFAULT NULL COMMENT '更新时间',
  `delete_date` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
权限列表接口
  1. api/internal/handler/routes.go:

    项目的路由文件,访问的路由都是在这个文件中编写的
# 可以直接添加访问接口
server.AddRoutes(
		[]rest.Route{
			{
				Method:  http.MethodGet,
				Path:    "/permission/list",
				Handler: PermissionListHandler(serverCtx),
			},
		},
	)
  1. api/internal/types/permissiontype.go:

    权限相关的结构体的定义类,主要包括请求和响应的结构体
type (
    // 获取列表暂时不需要参数,则先创建空结构体
	PermissionListReq struct{}

	PermissionListResp struct {
		PermissionInfo models.Permission
		IsHasChild     bool `json:"is_has_child"`
		Children       []PermissionListResp
	}
)
  1. api/internal/handler/permissionhandler.go:

    权限控制器文件,接收页面请求并返回数据
package handler

// PermissionListHandler 权限列表控制器
func PermissionListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
	    // 定义3个变量:请求的结构体、响应数据的结构体、错误信息
		var (
			req  types.PermissionListReq
			resp []types.PermissionListResp
			err  error
		)

        
        // 将接收到的数据解析成请求结构体
		if err = httpx.Parse(r, &req); err != nil {
			httpx.Error(w, err)
			return
		}

       
        // 调用logic函数处理业务逻辑
		resp, err = logic.NewPermissionLogic(r.Context(), svcCtx).List()
		if err != nil {
			httpx.Error(w, err)
		} else {
			httpx.OkJson(w, resp)
		}
	}
}
  1. api/internal/logic/permissionlogic.go:

    业务逻辑文件,处理数据
package logic

import (
	"app/auth/api/internal/svc"
	"app/auth/api/internal/types"
	"app/models"
	"context"
	"github.com/zeromicro/go-zero/core/logx"
)

// 权限对象实例
type PermissionLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

// 返回对象实例
func NewPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PermissionLogic {
	return &PermissionLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// List 获取权限列表
func (l *PermissionLogic) List() (resp []types.PermissionListResp, err error) {
	// 这里处理业务逻辑
	resp, _, err = l.getChildForMenu(0)
	return
}

// getChildForMenu 获取目录下的子菜单
func (l *PermissionLogic) getChildForMenu(menuId int64) (resp []types.PermissionListResp, isHasChildren bool, err error) {
	var (
		db       = l.svcCtx.Mysql.Model(&models.Permission{})
		tempList []models.Permission
	)

	db.Where("parent_id = ?", menuId).Scan(&tempList)
	if tempList != nil {
		isHasChildren = true
		// 如果存在,则表示有子集合
		for _, v := range tempList {
			// 获取子集
			tempChildren, tempIsHasChildren, err := l.getChildForMenu(v.ID)
			if err == nil {
				resp = append(resp, types.PermissionListResp{
					PermissionInfo: v,
					IsHasChild:     tempIsHasChildren,
					Children:       tempChildren,
				})
			}
		}
	} else {
		// 不存在,则无子集合
		isHasChildren = false
	}

	return
}
获取用户

这样,权限后端接口就开发完成了,后面继续菜单权限列表界面开发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yooKnight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值