MCPcopy Create free account
hub / github.com/bytebase/bytebase / hasExtraWorkspaceAdmin

Method hasExtraWorkspaceAdmin

backend/api/v1/user_service.go:566–596  ·  view source on GitHub ↗
(ctx context.Context, policy *storepb.IamPolicy, user *store.UserMessage)

Source from the content-addressed store, hash-verified

564}
565
566func (s *UserService) hasExtraWorkspaceAdmin(ctx context.Context, policy *storepb.IamPolicy, user *store.UserMessage) (bool, error) {
567 workspaceAdminRole := common.FormatRole(store.WorkspaceAdminRole)
568 userMember := common.FormatUserEmail(user.Email)
569
570 for _, binding := range policy.GetBindings() {
571 if binding.GetRole() != workspaceAdminRole {
572 continue
573 }
574 for _, member := range binding.GetMembers() {
575 if member == userMember {
576 continue
577 }
578 if member == common.AllUsers && !s.profile.SaaS {
579 // allUsers means every user is an admin. Count all active end users
580 // (not just workspace members) since allUsers includes everyone.
581 count, err := s.store.CountActivePrincipals(ctx)
582 if err != nil {
583 return false, err
584 }
585 return count > 1, nil
586 }
587 users := utils.GetUsersByMember(ctx, s.store, common.GetWorkspaceIDFromContext(ctx), member)
588 for _, user := range users {
589 if !user.MemberDeleted && user.Type == storepb.PrincipalType_END_USER {
590 return true, nil
591 }
592 }
593 }
594 }
595 return false, nil
596}
597
598// UndeleteUser undeletes a user.
599func (s *UserService) UndeleteUser(ctx context.Context, request *connect.Request[v1pb.UndeleteUserRequest]) (*connect.Response[v1pb.User], error) {

Callers 1

DeleteUserMethod · 0.95

Calls 8

FormatRoleFunction · 0.92
FormatUserEmailFunction · 0.92
GetUsersByMemberFunction · 0.92
CountActivePrincipalsMethod · 0.80
GetRoleMethod · 0.65
GetBindingsMethod · 0.45
GetMembersMethod · 0.45

Tested by

no test coverage detected