productListLogic.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package product
  2. import (
  3. "context"
  4. "perms-system-server/internal/middleware"
  5. "perms-system-server/internal/response"
  6. "perms-system-server/internal/svc"
  7. "perms-system-server/internal/types"
  8. "perms-system-server/internal/util"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. type ProductListLogic struct {
  12. logx.Logger
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. }
  16. func NewProductListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ProductListLogic {
  17. return &ProductListLogic{
  18. Logger: logx.WithContext(ctx),
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. }
  22. }
  23. // ProductList 产品列表。超管分页查询系统中所有产品;非超管仅能看到自己所属的那一个产品
  24. // (防止 MEMBER 级账号枚举全站 code 列表后拼装 admin_<code> 做针对性撞库,见审计 M-2)。
  25. func (l *ProductListLogic) ProductList(req *types.ProductListReq) (resp *types.PageResp, err error) {
  26. caller := middleware.GetUserDetails(l.ctx)
  27. if caller == nil {
  28. return nil, response.ErrUnauthorized("未登录")
  29. }
  30. if !caller.IsSuperAdmin {
  31. items := make([]types.ProductItem, 0, 1)
  32. if caller.ProductCode != "" {
  33. p, err := l.svcCtx.SysProductModel.FindOneByCode(l.ctx, caller.ProductCode)
  34. if err == nil {
  35. items = append(items, types.ProductItem{
  36. Id: p.Id,
  37. Code: p.Code,
  38. Name: p.Name,
  39. Remark: p.Remark,
  40. Status: p.Status,
  41. CreateTime: p.CreateTime,
  42. })
  43. }
  44. }
  45. return &types.PageResp{Total: int64(len(items)), List: items}, nil
  46. }
  47. page, pageSize := util.NormalizePage(req.Page, req.PageSize)
  48. list, total, err := l.svcCtx.SysProductModel.FindList(l.ctx, page, pageSize)
  49. if err != nil {
  50. return nil, err
  51. }
  52. items := make([]types.ProductItem, 0, len(list))
  53. for _, p := range list {
  54. items = append(items, types.ProductItem{
  55. Id: p.Id,
  56. Code: p.Code,
  57. Name: p.Name,
  58. AppKey: p.AppKey,
  59. Remark: p.Remark,
  60. Status: p.Status,
  61. CreateTime: p.CreateTime,
  62. })
  63. }
  64. return &types.PageResp{
  65. Total: total,
  66. List: items,
  67. }, nil
  68. }