go-zero单体服务(权限管理-4)
角色关联权限资源新增删除
新增api/role_permission_resource.api
type (
RolePermissionResourceListRequest {
RoleId int64 `form:"role_id"`
}
RolePermissionResource {
Id int64 `json:"id"`
Name string `json:"name"`
URL string `json:"url"`
Ctime int64 `json:"ctime"`
}
RolePermissionResourceListResponse {
Code int64 `json:"code"`
Msg string `json:"msg"`
Data []RolePermissionResource `json:"data"`
}
RolePermissionResourceEditRequest {
RoleId int64 `form:"role_id"`
Data string `form:"data"`
}
RolePermissionResourceEditResponse {
Code int64 `json:"code"`
Msg string `json:"msg"`
}
)
修改 project.api
...
import (
"./api/routers.api"
"./api/user.api"
"./api/permission_resource.api"
"./api/role_permission_resource.api" // 新增
)
...
// 角色资源列表
@handler RolePermissionResourceList
post /api/role/permission/resource/list(RolePermissionResourceListRequest) returns (RolePermissionResourceListResponse)
// 角色分配资源
@handler RolePermissionResourceEdit
post /api/role/permission/resource/edit(RolePermissionResourceEditRequest) returns (RolePermissionResourceEditResponse)
...
运行 make api 生成代码
修改internal/logic/rolepermissionresourceeditlogic.go
func (l *RolePermissionResourceEditLogic) RolePermissionResourceEdit(req *types.RolePermissionResourceEditRequest) (resp *types.RolePermissionResourceEditResponse, err error) {
r := l.svcCtx.BkModel.RolePermissionResource
// 先删除
_, err = r.WithContext(l.ctx).Where(r.RoleID.Eq(req.RoleId)).Delete()
if err != nil {
return &types.RolePermissionResourceEditResponse{
Code: 500,
Msg: err.Error(),
}, nil
}
var data []*model.RolePermissionResource
ids := strings.Split(req.Data, ",")
for _, item := range ids {
i, _ := strconv.Atoi(item)
p := &model.RolePermissionResource{
RoleID: req.RoleId,
Prid: int64(i),
Ctime: int32(time.Now().Unix()),
Utime: int32(time.Now().Unix()),
}
data = append(data, p)
}
// 分配权限
if data != nil {
r.WithContext(l.ctx).Create(data...)
}
return &types.RolePermissionResourceEditResponse{
Code: 200,
Msg: "成功",
}, nil
}
修改internal/logic/rolepermissionresourcelistlogic.go
func (l *RolePermissionResourceListLogic) RolePermissionResourceList(req *types.RolePermissionResourceListRequest) (resp *types.RolePermissionResourceListResponse, err error) {
// join查询
r := l.svcCtx.BkModel.RolePermissionResource
p := l.svcCtx.BkModel.PermissionResource
var data []types.RolePermissionResource
err = r.WithContext(l.ctx).Select(p.ID.As("Id"), r.Ctime, p.Name, p.URL).LeftJoin(p, r.Prid.EqCol(p.ID)).Scan(&data)
if err != nil {
return &types.RolePermissionResourceListResponse{
Code: 200,
Msg: err.Error(),
}, nil
}
return &types.RolePermissionResourceListResponse{
Code: 200,
Msg: "成功",
Data: data,
}, nil
}
列表
192.168.1.13:8888/api/role/permission/resource/list?role_id=2
{
"code": 200,
"msg": "成功",
"data": [
{
"id": 2,
"name": "用户信息",
"url": "/api/user/info",
"ctime": 1676356348
}
]
}
编辑
192.168.1.13:8888/api/role/permission/resource/edit?role_id=2&data=2
{
"code": 200,
"msg": "成功"
}
本作品采用《CC 协议》,转载必须注明作者和本文链接