Skip to content

Commit a989224

Browse files
committed
Refactor workspacesByUser
1 parent 301d42a commit a989224

File tree

1 file changed

+5
-41
lines changed

1 file changed

+5
-41
lines changed

coderd/users.go

+5-41
Original file line numberDiff line numberDiff line change
@@ -826,47 +826,11 @@ func (api *api) createUser(ctx context.Context, req codersdk.CreateUserRequest)
826826
})
827827
}
828828

829-
//
830829
func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) {
831830
user := httpmw.UserParam(r)
832831
roles := httpmw.UserRoles(r)
833832

834-
organizations, err := api.Database.GetOrganizationsByUserID(r.Context(), user.ID)
835-
if err != nil {
836-
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
837-
Message: fmt.Sprintf("get organizations: %s", err),
838-
})
839-
return
840-
}
841-
organizationIDs := make([]uuid.UUID, 0)
842-
for _, organization := range organizations {
843-
err = api.Authorizer.ByRoleName(r.Context(), user.ID.String(), roles.Roles, rbac.ActionRead, rbac.ResourceWorkspace.All().InOrg(organization.ID))
844-
var apiErr *rbac.UnauthorizedError
845-
if xerrors.As(err, &apiErr) {
846-
continue
847-
}
848-
if err != nil {
849-
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
850-
Message: fmt.Sprintf("authorize: %s", err),
851-
})
852-
return
853-
}
854-
organizationIDs = append(organizationIDs, organization.ID)
855-
}
856-
857-
workspaceIDs := map[uuid.UUID]struct{}{}
858-
allWorkspaces, err := api.Database.GetWorkspacesByOrganizationIDs(r.Context(), database.GetWorkspacesByOrganizationIDsParams{
859-
Ids: organizationIDs,
860-
})
861-
if err != nil {
862-
httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{
863-
Message: fmt.Sprintf("get workspaces for organizations: %s", err),
864-
})
865-
return
866-
}
867-
for _, ws := range allWorkspaces {
868-
workspaceIDs[ws.ID] = struct{}{}
869-
}
833+
allWorkspaces := make([]database.Workspace, 0)
870834
userWorkspaces, err := api.Database.GetWorkspacesByOwnerID(r.Context(), database.GetWorkspacesByOwnerIDParams{
871835
OwnerID: user.ID,
872836
})
@@ -877,11 +841,11 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) {
877841
return
878842
}
879843
for _, ws := range userWorkspaces {
880-
_, exists := workspaceIDs[ws.ID]
881-
if exists {
882-
continue
844+
err = api.Authorizer.ByRoleName(r.Context(), user.ID.String(), roles.Roles, rbac.ActionRead,
845+
rbac.ResourceWorkspace.InOrg(ws.OrganizationID).WithOwner(ws.OwnerID.String()).WithID(ws.ID.String()))
846+
if err == nil {
847+
allWorkspaces = append(allWorkspaces, ws)
883848
}
884-
allWorkspaces = append(allWorkspaces, ws)
885849
}
886850

887851
apiWorkspaces, err := convertWorkspaces(r.Context(), api.Database, allWorkspaces)

0 commit comments

Comments
 (0)