kra/internal/service/system/authority_btn.go

89 lines
2.7 KiB
Go

package system
import (
"strconv"
"kra/internal/biz/system"
"github.com/go-kratos/kratos/v2/errors"
"github.com/go-kratos/kratos/v2/transport/http"
)
// AuthorityBtnService 角色按钮权限服务
type AuthorityBtnService struct {
uc *system.AuthorityBtnUsecase
}
// NewAuthorityBtnService 创建角色按钮权限服务
func NewAuthorityBtnService(uc *system.AuthorityBtnUsecase) *AuthorityBtnService {
return &AuthorityBtnService{uc: uc}
}
// GetAuthorityBtnRequest 获取角色按钮权限请求
type GetAuthorityBtnRequest struct {
AuthorityId uint `json:"authorityId"`
MenuID uint `json:"menuID"`
}
// GetAuthorityBtnResponse 获取角色按钮权限响应
type GetAuthorityBtnResponse struct {
Selected []uint `json:"selected"`
}
// SetAuthorityBtnRequest 设置角色按钮权限请求
type SetAuthorityBtnRequest struct {
AuthorityId uint `json:"authorityId"`
MenuID uint `json:"menuID"`
Selected []uint `json:"selected"`
}
// RegisterRoutes 注册路由
func (s *AuthorityBtnService) RegisterRoutes(rg *RouterGroup) {
// 角色按钮权限(不需要操作记录)
rg.Private.POST("/authorityBtn/getAuthorityBtn", s.handleGetAuthorityBtn)
rg.Private.POST("/authorityBtn/setAuthorityBtn", s.handleSetAuthorityBtn)
rg.Private.POST("/authorityBtn/canRemoveAuthorityBtn", s.handleCanRemoveAuthorityBtn)
}
func (s *AuthorityBtnService) handleGetAuthorityBtn(ctx http.Context) error {
var req GetAuthorityBtnRequest
if err := ctx.Bind(&req); err != nil {
return err
}
selected, err := s.uc.GetAuthorityBtn(ctx, req.AuthorityId, req.MenuID)
if err != nil {
return errors.InternalServer("QUERY_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{
"code": 0,
"msg": "查询成功",
"data": GetAuthorityBtnResponse{Selected: selected},
})
}
func (s *AuthorityBtnService) handleSetAuthorityBtn(ctx http.Context) error {
var req SetAuthorityBtnRequest
if err := ctx.Bind(&req); err != nil {
return err
}
if err := s.uc.SetAuthorityBtn(ctx, req.AuthorityId, req.MenuID, req.Selected); err != nil {
return errors.InternalServer("SET_ERROR", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "分配成功"})
}
func (s *AuthorityBtnService) handleCanRemoveAuthorityBtn(ctx http.Context) error {
idStr := ctx.Request().URL.Query().Get("id")
if idStr == "" {
return errors.BadRequest("INVALID_ID", "id参数不能为空")
}
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return errors.BadRequest("INVALID_ID", "id参数格式错误")
}
if err := s.uc.CanRemoveAuthorityBtn(ctx, uint(id)); err != nil {
return errors.BadRequest("BTN_IN_USE", err.Error())
}
return ctx.Result(200, map[string]any{"code": 0, "msg": "删除成功"})
}