go-zero单体服务(权限管理-3)

go-zero单体服务(权限管理-3)

go-zero单体服务(权限管理-1)获取路由列表就是为了这个接口,提供可用的URL,其实也可以手动编写URL来传入这个接口。(手动不安全还是通过代码获取比较合理)

新建 api/permission_resource.api

type(
    PermissionResourceListRequest {
    }
    PermissionResource {
        Name string `form:"name"`
        Url string `form:"url"`
        Ctime int64 `form:"ctime"`
    }
    PermissionResourceListResponse {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
        Data []PermissionResource `json:"data"`
    }
    PermissionResourceEditRequest {
        Id int64 `form:"id"`
        Name string `form:"name"`
        Url string `form:"url"`
    }
    PermissionResourceEditResponse {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
    }
    PermissionResourceDeleteRequest {
        Id int64 `form:"id"`
    }
    PermissionResourceDeleteResponse {
        Code int64 `json:"code"`
        Msg string `json:"msg"`
    }
)

修改project.api

...
import (
    "./api/routers.api"
    "./api/user.api"
    "./api/permission_resource.api"
)
...
// 权限资源列表
@handler PermissionResourceList
post /api/permission/resource/list(PermissionResourceListRequest) returns (PermissionResourceListResponse)

// 权限资源列表
@handler PermissionResourceEdit
post /api/permission/resource/edit(PermissionResourceEditRequest) returns (PermissionResourceEditResponse)

// 权限资源删除
@handler PermissionResourceDelete
post /api/permission/resource/delete(PermissionResourceDeleteRequest) returns (PermissionResourceDeleteResponse)

运行 make api 生成代码

修改 internal/logic/permissionresourcelistlogic.go

func (l *PermissionResourceListLogic) PermissionResourceList(req *types.PermissionResourceListRequest) (resp *types.PermissionResourceListResponse, err error) {
    p := l.svcCtx.BkModel.PermissionResource
    pr, err := p.WithContext(l.ctx).Where(p.Status.Eq(1)).Find()

    if err != nil {
        return &types.PermissionResourceListResponse{
            Code: 500,
            Msg:  err.Error(),
        }, nil
    }
    var data []types.PermissionResource
    if pr != nil {
        for _, item := range pr {
            d := types.PermissionResource{
                Name:  item.Name,
                Url:   item.URL,
                Ctime: int64(item.Ctime),
            }
            data = append(data, d)
        }
    }

    return &types.PermissionResourceListResponse{
        Code: 200,
        Msg:  "成功",
        Data: data,
    }, nil
}

修改 internal/logic/permissionresourceeditlogic.go

func (l *PermissionResourceEditLogic) PermissionResourceEdit(req *types.PermissionResourceEditRequest) (resp *types.PermissionResourceEditResponse, err error) {
    p := l.svcCtx.BkModel.PermissionResource

    // 只做新增,不做修改
    // 查询数据是否存在
    rp, _ := p.WithContext(l.ctx).Where(p.URL.Eq(req.Url)).Where(p.Status.Eq(1)).First()
    if rp != nil {
        return &types.PermissionResourceEditResponse{
            Code: 500,
            Msg:  "资源已存在",
        }, nil
    }

    // 新建
    err = p.WithContext(l.ctx).Create(&model.PermissionResource{
        Name:  req.Name,
        URL:   req.Url,
        Ctime: int32(time.Now().Unix()),
        Utime: int32(time.Now().Unix()),
    })

    if err != nil {
        return &types.PermissionResourceEditResponse{
            Code: 500,
            Msg:  "新建失败",
        }, nil
    }

    return &types.PermissionResourceEditResponse{
        Code: 200,
        Msg:  "成功",
    }, nil
}

修改 internal/logic/permissionresourcedeletelogic.go

func (l *PermissionResourceDeleteLogic) PermissionResourceDelete(req *types.PermissionResourceDeleteRequest) (resp *types.PermissionResourceDeleteResponse, err error) {
    p := l.svcCtx.BkModel.PermissionResource

    // 标记删除
    _, err = p.WithContext(l.ctx).Where(p.ID.Eq(req.Id)).Updates(&model.PermissionResource{
        Status: 2,
        Utime:  int32(time.Now().Unix()),
    })

    if err != nil {
        return &types.PermissionResourceDeleteResponse{
            Code: 500,
            Msg:  err.Error(),
        }, nil
    }

    return &types.PermissionResourceDeleteResponse{
        Code: 200,
        Msg:  "成功",
    }, nil
}

运行 make:dev

创建

192.168.1.13:8888/api/permission/resource/edit?name=用户信息&url=/api/user/info&id=0

{
    "code": 200,
    "msg": "成功"
}

查询

192.168.1.13:8888/api/permission/resource/list

{
    "code": 200,
    "msg": "成功",
    "data": [
        {
            "Name": "用户信息",
            "Url": "/api/user/info",
            "Ctime": 1676297045
        }
    ]
}

删除

192.168.1.13:8888/api/permission/resource/delete?id=1

{
    "code": 200,
    "msg": "成功"
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!