github.com/infraboard/keyauth@v0.8.1/apps/user/impl/dao.go (about) 1 package impl 2 3 import ( 4 "context" 5 6 "github.com/infraboard/mcube/exception" 7 "github.com/infraboard/mcube/http/request" 8 9 "github.com/infraboard/keyauth/apps/department" 10 "github.com/infraboard/keyauth/apps/policy" 11 "github.com/infraboard/keyauth/apps/user" 12 ) 13 14 func (s *service) saveAccount(u *user.User) error { 15 if _, err := s.col.InsertOne(context.TODO(), u); err != nil { 16 return exception.NewInternalServerError("inserted user(%s) document error, %s", 17 u.Account, err) 18 } 19 20 return nil 21 } 22 23 func (s *service) queryAccount(ctx context.Context, req *queryUserRequest) (*user.Set, error) { 24 userSet := user.NewUserSet() 25 26 if !req.SkipItems { 27 s.log.Debugf("find filter: %s", req.FindFilter()) 28 resp, err := s.col.Find(context.TODO(), req.FindFilter(), req.FindOptions()) 29 30 // 查询出该空间下的用户列表 31 if req.NamespaceId != "" { 32 ps, err := s.queryNamespacePolicy(ctx, req.NamespaceId) 33 if err != nil { 34 return nil, err 35 } 36 req.Accounts = ps.Users() 37 } 38 39 if err != nil { 40 return nil, exception.NewInternalServerError("find user error, error is %s", err) 41 } 42 43 // 循环 44 for resp.Next(context.TODO()) { 45 u := new(user.User) 46 if err := resp.Decode(u); err != nil { 47 return nil, exception.NewInternalServerError("decode user error, error is %s", err) 48 } 49 50 // 补充用户的部门信息 51 if req.WithDepartment && u.DepartmentId != "" { 52 depart, err := s.depart.DescribeDepartment(ctx, department.NewDescribeDepartmentRequestWithID(u.DepartmentId)) 53 if err != nil { 54 s.log.Errorf("get user department error, %s", err) 55 } else { 56 u.Department = depart 57 } 58 } 59 60 u.Desensitize() 61 userSet.Add(u) 62 } 63 } 64 65 // count 66 count, err := s.col.CountDocuments(context.TODO(), req.FindFilter()) 67 if err != nil { 68 return nil, exception.NewInternalServerError("get device count error, error is %s", err) 69 } 70 userSet.Total = count 71 72 return userSet, nil 73 } 74 75 func (s *service) queryNamespacePolicy(ctx context.Context, namespaceID string) (*policy.Set, error) { 76 pReq := policy.NewQueryPolicyRequest(request.NewPageRequest(20, 1)) 77 pReq.NamespaceId = namespaceID 78 return s.policy.QueryPolicy(ctx, pReq) 79 }