package product import ( "context" "perms-system-server/internal/middleware" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/types" "perms-system-server/internal/util" "github.com/zeromicro/go-zero/core/logx" ) type ProductListLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewProductListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ProductListLogic { return &ProductListLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } // ProductList 产品列表。超管分页查询系统中所有产品;非超管仅能看到自己所属的那一个产品 // (防止 MEMBER 级账号枚举全站 code 列表后拼装 admin_ 做针对性撞库,见审计 M-2)。 func (l *ProductListLogic) ProductList(req *types.ProductListReq) (resp *types.PageResp, err error) { caller := middleware.GetUserDetails(l.ctx) if caller == nil { return nil, response.ErrUnauthorized("未登录") } if !caller.IsSuperAdmin { items := make([]types.ProductItem, 0, 1) if caller.ProductCode != "" { p, err := l.svcCtx.SysProductModel.FindOneByCode(l.ctx, caller.ProductCode) if err == nil { items = append(items, types.ProductItem{ Id: p.Id, Code: p.Code, Name: p.Name, Remark: p.Remark, Status: p.Status, CreateTime: p.CreateTime, }) } } return &types.PageResp{Total: int64(len(items)), List: items}, nil } page, pageSize := util.NormalizePage(req.Page, req.PageSize) list, total, err := l.svcCtx.SysProductModel.FindList(l.ctx, page, pageSize) if err != nil { return nil, err } items := make([]types.ProductItem, 0, len(list)) for _, p := range list { items = append(items, types.ProductItem{ Id: p.Id, Code: p.Code, Name: p.Name, AppKey: p.AppKey, Remark: p.Remark, Status: p.Status, CreateTime: p.CreateTime, }) } return &types.PageResp{ Total: total, List: items, }, nil }