Files
bl/modules/base/service/base_sys_menu.go
昔念 cccf26788e fix(socket): 玩家断开连接时增加保存锁,避免重复保存
在玩家断开连接时,使用 sync.Once 确保只保存一次玩家数据,
防止因并发或多次触发导致的数据异常。

feat(fight): 增加战斗资格判断与邀请取消功能

- 新增 Player.CanFight() 方法用于统一判断是否可以参与战斗
- 在多个战斗相关接口中加入 CanFight 检查
- 添加“取消战斗邀请”指令及处理逻辑(cmd: 2402)
- 修复部分错误码不准确的问题,提升提示一致性

refactor(login): 优化登录流程并增强健壮性

- 提前校验 session 合法性
- 增强获取玩家信息后的空指针检查
- 调整挖矿数据重置方式为 defer 执行
- 优化日志输出内容,便于调试追踪

docs(model): 更新部门、菜单等模型字段命名规范

将 orderNum 字段改为 ordernum,保持数据库列名风格一致,
同时更新了 base_sys_role 中 userId 为 userid。

perf(rate-limit): 提高登录接口的限流 Burst 容量

调整限流器配置,将请求 burst 容量从 2 提升至 5,
以应对短时间高频访问场景,改善用户体验。

chore(build): 忽略新增编译产物和临时文件

在 .gitignore 中添加 logic/logic2、login/login 等新生成文件路径,
避免误提交二进制文件到版本控制。
2025-10-31 00:53:22 +08:00

97 lines
2.4 KiB
Go

package service
import (
"context"
"fmt"
"blazing/cool"
"blazing/modules/base/model"
"github.com/gogf/gf/v2/container/garray"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/text/gstr"
"github.com/gogf/gf/v2/util/gconv"
)
type BaseSysMenuService struct {
*cool.Service
}
// GetPerms 获取菜单的权限
func (s *BaseSysMenuService) GetPerms(roleIds []string) []string {
var (
perms []string
result gdb.Result
)
m := cool.DBM(s.Model).As("a")
// 如果roldIds 包含 1 则表示是超级管理员,则返回所有权限
if garray.NewIntArrayFrom(gconv.Ints(roleIds)).Contains(1) {
result, _ = m.Fields("a.perms").All()
} else {
result, _ = m.InnerJoin("base_sys_role_menu b", `a.id=b."menuId"`).InnerJoin("base_sys_role c", `b."roleId"=c.id`).Where("c.id IN (?)", roleIds).Fields("a.perms").All()
}
for _, v := range result {
vmap := v.Map()
if vmap["perms"] != nil {
p := gstr.Split(vmap["perms"].(string), ",")
perms = append(perms, p...)
}
}
return perms
}
// GetMenus 获取菜单
func (s *BaseSysMenuService) GetMenus(roleIds []string, isAdmin bool) (result gdb.Result) {
// 屏蔽 base_sys_role_menu.id 防止部分权限的用户登录时菜单渲染错误
m := cool.DBM(s.Model).As("a").Fields("a.*")
var err error
if isAdmin {
result, err = m.Group("a.id").Order(`a.ordernum`, "asc").All()
fmt.Println(err)
} else {
result, _ = m.InnerJoin("base_sys_role_menu b", `a.id=b."menuId"`).Where(`b."roleId" IN (?)`, roleIds).Group("a.id").Order("a.ordernum asc").All()
}
return
}
// ModifyAfter 修改后
func (s *BaseSysMenuService) ModifyAfter(ctx context.Context, method string, param g.MapStrAny) (err error) {
if method == "Delete" {
ids := gconv.Ints(param["ids"])
if len(ids) > 0 {
_, err = cool.DBM(s.Model).Where("parentId IN (?)", ids).Delete()
}
return
}
return
}
// ServiceAdd 添加
func (s *BaseSysMenuService) ServiceAdd(ctx context.Context, req *cool.AddReq) (data interface{}, err error) {
r := g.RequestFromCtx(ctx)
rjson, err := r.GetJson()
if err != nil {
return
}
// g.DumpWithType(rjson)
m := cool.DBM(s.Model)
lastInsertId, err := m.Data(rjson).InsertAndGetId()
if err != nil {
return
}
data = g.Map{"id": lastInsertId}
return
}
// NewBaseSysMenuService 创建一个BaseSysMenuService实例
func NewBaseSysMenuService() *BaseSysMenuService {
return &BaseSysMenuService{
&cool.Service{
Model: model.NewBaseSysMenu(),
},
}
}