Some checks failed
Build and Deploy (service.xpcool.com) / build-and-deploy (push) Failing after 5m7s
- 新增 9 张房屋相关数据表(社区/楼宇/房源/价格快照/交易/设施/社区设施/学区/偏好) - 添加菜单权限种子数据并绑定超级管理员角色 - 生成 DAO 层代码和实体对象 - 实现房屋模块 API 接口(社区/房源/看板)和控制器服务层 - 支持多平台软关联匹配、笋盘标记和低可信度标记功能 - 更新超级管理员账号为 xxcool/xxCool@2026 - 调整 RBAC 菜单结构,移除管理员管理功能,新增日志管理菜单 - 修复 RBAC 安全漏洞,确保禁用角色权限失效 - 重构认证模块,将登录相关接口迁移到统一包结构下 - 移除废弃的管理模块和工具类接口定义 - 为通用工具包添加中文注释和文档说明
70 lines
2.2 KiB
Go
70 lines
2.2 KiB
Go
package admin
|
||
|
||
import (
|
||
"context"
|
||
|
||
authv1 "service.xpcool.com/api/admin/admin/login"
|
||
menuv1 "service.xpcool.com/api/admin/system/menu"
|
||
"service.xpcool.com/internal/model/dto"
|
||
auth "service.xpcool.com/internal/service/admin/admin/login"
|
||
menu "service.xpcool.com/internal/service/admin/system/menu"
|
||
)
|
||
|
||
// ProfileController 暴露当前登录管理员的资料端点
|
||
// (login-only, no X-Permission required). Bind behind AdminAuthOnly.
|
||
type ProfileController struct{}
|
||
|
||
// NewProfile 创建资料控制器。
|
||
func NewProfile() *ProfileController { return &ProfileController{} }
|
||
|
||
// Info 返回当前管理员资料。
|
||
func (c *ProfileController) Info(ctx context.Context, req *authv1.InfoReq) (res *authv1.InfoRes, err error) {
|
||
info, err := auth.AdminAuth().Info(ctx, adminID(ctx))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &authv1.InfoRes{AdminID: info.AdminID, Username: info.Username, Nickname: info.Nickname, Roles: info.Roles}, nil
|
||
}
|
||
|
||
// Codes 返回当前管理员的按钮级权限码。
|
||
func (c *ProfileController) Codes(ctx context.Context, req *authv1.CodesReq) (res *authv1.CodesRes, err error) {
|
||
codes, err := auth.AdminAuth().Codes(ctx, adminID(ctx))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return &authv1.CodesRes{Codes: codes}, nil
|
||
}
|
||
|
||
// Routes 返回当前管理员的可见菜单树(vben 路由)。
|
||
func (c *ProfileController) Routes(ctx context.Context, req *menuv1.MenuRoutesReq) (res *menuv1.MenuRoutesRes, err error) {
|
||
routes, err := menu.AdminMenu().Routes(ctx, adminID(ctx))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
out := make([]*menuv1.RouteItem, 0, len(routes))
|
||
for _, r := range routes {
|
||
out = append(out, toV1Route(r))
|
||
}
|
||
return &menuv1.MenuRoutesRes{Routes: out}, nil
|
||
}
|
||
|
||
// toV1Route 将 dto 路由树转换为 API 层结构。
|
||
func toV1Route(r *dto.RouteItem) *menuv1.RouteItem {
|
||
item := &menuv1.RouteItem{
|
||
Name: r.Name,
|
||
Path: r.Path,
|
||
Component: r.Component,
|
||
Meta: menuv1.RouteMeta{
|
||
Title: r.Meta.Title,
|
||
Icon: r.Meta.Icon,
|
||
Order: r.Meta.Order,
|
||
Authority: r.Meta.Authority,
|
||
HideInMenu: r.Meta.HideInMenu,
|
||
},
|
||
}
|
||
for _, c := range r.Children {
|
||
item.Children = append(item.Children, toV1Route(c))
|
||
}
|
||
return item
|
||
}
|