@@ -820,7 +820,8 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) {
820
820
organizationIDs := make ([]uuid.UUID , 0 )
821
821
for _ , organization := range organizations {
822
822
err = api .Authorizer .AuthorizeByRoleName (r .Context (), user .ID .String (), roles .Roles , rbac .ActionRead , rbac .ResourceWorkspace .All ().InOrg (organization .ID ))
823
- if errors .Is (err , & rbac.UnauthorizedError {}) {
823
+ var apiErr * rbac.UnauthorizedError
824
+ if xerrors .As (err , & apiErr ) {
824
825
continue
825
826
}
826
827
if err != nil {
@@ -832,7 +833,8 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) {
832
833
organizationIDs = append (organizationIDs , organization .ID )
833
834
}
834
835
835
- workspaces , err := api .Database .GetWorkspacesByOrganizationIDs (r .Context (), database.GetWorkspacesByOrganizationIDsParams {
836
+ workspaceIDs := map [uuid.UUID ]struct {}{}
837
+ allWorkspaces , err := api .Database .GetWorkspacesByOrganizationIDs (r .Context (), database.GetWorkspacesByOrganizationIDsParams {
836
838
Ids : organizationIDs ,
837
839
})
838
840
if err != nil {
@@ -841,7 +843,27 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) {
841
843
})
842
844
return
843
845
}
844
- apiWorkspaces , err := convertWorkspaces (r .Context (), api .Database , workspaces )
846
+ for _ , ws := range allWorkspaces {
847
+ workspaceIDs [ws .ID ] = struct {}{}
848
+ }
849
+ userWorkspaces , err := api .Database .GetWorkspacesByOwnerID (r .Context (), database.GetWorkspacesByOwnerIDParams {
850
+ OwnerID : user .ID ,
851
+ })
852
+ if err != nil {
853
+ httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
854
+ Message : fmt .Sprintf ("get workspaces for user: %s" , err ),
855
+ })
856
+ return
857
+ }
858
+ for _ , ws := range userWorkspaces {
859
+ _ , exists := workspaceIDs [ws .ID ]
860
+ if exists {
861
+ continue
862
+ }
863
+ allWorkspaces = append (allWorkspaces , ws )
864
+ }
865
+
866
+ apiWorkspaces , err := convertWorkspaces (r .Context (), api .Database , allWorkspaces )
845
867
if err != nil {
846
868
httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
847
869
Message : fmt .Sprintf ("convert workspaces: %s" , err ),
0 commit comments