Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit12f6148

Browse files
committed
Fetch user and group data from DB
1 parentdbf5569 commit12f6148

File tree

2 files changed

+112
-3
lines changed

2 files changed

+112
-3
lines changed

‎coderd/aitasks.go‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ func (api *API) convertTasks(ctx context.Context, requesterID uuid.UUID, dbTasks
480480
returnnil,xerrors.Errorf("fetch workspace data: %w",err)
481481
}
482482

483-
apiWorkspaces,err:=convertWorkspaces(api.Experiments,requesterID,workspaces,data)
483+
apiWorkspaces,err:=convertWorkspaces(api.Experiments,requesterID,workspaces,data,nil,nil)
484484
iferr!=nil {
485485
returnnil,xerrors.Errorf("convert workspaces: %w",err)
486486
}
@@ -561,6 +561,8 @@ func (api *API) taskGet(rw http.ResponseWriter, r *http.Request) {
561561
data.templates[0],
562562
api.Options.AllowWorkspaceRenames,
563563
appStatus,
564+
nil,
565+
nil,
564566
)
565567
iferr!=nil {
566568
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{

‎coderd/workspaces.go‎

Lines changed: 109 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ func (api *API) workspace(rw http.ResponseWriter, r *http.Request) {
121121
data.templates[0],
122122
api.Options.AllowWorkspaceRenames,
123123
appStatus,
124+
nil,
125+
nil,
124126
)
125127
iferr!=nil {
126128
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
@@ -169,7 +171,6 @@ func (api *API) workspaces(rw http.ResponseWriter, r *http.Request) {
169171
filter.OwnerUsername=""
170172
}
171173

172-
// Workspaces do not have ACL columns.
173174
prepared,err:=api.HTTPAuth.AuthorizeSQLFilter(r,policy.ActionRead,rbac.ResourceWorkspace.Type)
174175
iferr!=nil {
175176
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
@@ -237,7 +238,30 @@ func (api *API) workspaces(rw http.ResponseWriter, r *http.Request) {
237238
return
238239
}
239240

240-
wss,err:=convertWorkspaces(api.Experiments,apiKey.UserID,workspaces,data)
241+
var (
242+
userDatamap[string]database.User
243+
groupDatamap[string]database.Group
244+
)
245+
ifapi.Experiments.Enabled(codersdk.ExperimentWorkspaceSharing) {
246+
varerrerror
247+
userData,groupData,err=findWorkspaceUsersAndGroups(ctx,api,workspaces)
248+
iferr!=nil {
249+
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
250+
Message:"Internal error fetching users and groups for workspaces.",
251+
Detail:err.Error(),
252+
})
253+
return
254+
}
255+
}
256+
257+
wss,err:=convertWorkspaces(
258+
api.Experiments,
259+
apiKey.UserID,
260+
workspaces,
261+
data,
262+
userData,
263+
groupData,
264+
)
241265
iferr!=nil {
242266
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
243267
Message:"Internal error converting workspaces.",
@@ -334,6 +358,8 @@ func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request)
334358
data.templates[0],
335359
api.Options.AllowWorkspaceRenames,
336360
appStatus,
361+
nil,
362+
nil,
337363
)
338364
iferr!=nil {
339365
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
@@ -863,6 +889,8 @@ func createWorkspace(
863889
template,
864890
api.Options.AllowWorkspaceRenames,
865891
codersdk.WorkspaceAppStatus{},
892+
nil,
893+
nil,
866894
)
867895
iferr!=nil {
868896
return codersdk.Workspace{},httperror.NewResponseError(http.StatusInternalServerError, codersdk.Response{
@@ -1507,6 +1535,8 @@ func (api *API) putWorkspaceDormant(rw http.ResponseWriter, r *http.Request) {
15071535
data.templates[0],
15081536
api.Options.AllowWorkspaceRenames,
15091537
appStatus,
1538+
nil,
1539+
nil,
15101540
)
15111541
iferr!=nil {
15121542
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
@@ -2085,6 +2115,8 @@ func (api *API) watchWorkspace(
20852115
data.templates[0],
20862116
api.Options.AllowWorkspaceRenames,
20872117
appStatus,
2118+
nil,
2119+
nil,
20882120
)
20892121
iferr!=nil {
20902122
_=sendEvent(codersdk.ServerSentEvent{
@@ -2533,6 +2565,8 @@ func convertWorkspaces(
25332565
requesterID uuid.UUID,
25342566
workspaces []database.Workspace,
25352567
dataworkspaceData,
2568+
userDatamap[string]database.User,
2569+
groupDatamap[string]database.Group,
25362570
) ([]codersdk.Workspace,error) {
25372571
buildByWorkspaceID:=map[uuid.UUID]codersdk.WorkspaceBuild{}
25382572
for_,workspaceBuild:=rangedata.builds {
@@ -2572,6 +2606,8 @@ func convertWorkspaces(
25722606
template,
25732607
data.allowRenames,
25742608
appStatus,
2609+
userData,
2610+
groupData,
25752611
)
25762612
iferr!=nil {
25772613
returnnil,xerrors.Errorf("convert workspace: %w",err)
@@ -2590,6 +2626,8 @@ func convertWorkspace(
25902626
template database.Template,
25912627
allowRenamesbool,
25922628
latestAppStatus codersdk.WorkspaceAppStatus,
2629+
userDatamap[string]database.User,
2630+
groupDatamap[string]database.Group,
25932631
) (codersdk.Workspace,error) {
25942632
ifrequesterID==uuid.Nil {
25952633
return codersdk.Workspace{},xerrors.Errorf("developer error: requesterID cannot be uuid.Nil!")
@@ -2832,3 +2870,72 @@ func convertToWorkspaceRole(actions []policy.Action) codersdk.WorkspaceRole {
28322870

28332871
returncodersdk.WorkspaceRoleDeleted
28342872
}
2873+
2874+
// findWorkspaceUsersAndGroups fetches all users and groups present in
2875+
// workspaces' ACLs.
2876+
funcfindWorkspaceUsersAndGroups(
2877+
ctx context.Context,
2878+
api*API,
2879+
workspaces []database.Workspace,
2880+
) (
2881+
userDatamap[string]database.User,
2882+
groupDatamap[string]database.Group,
2883+
errerror,
2884+
) {
2885+
// Get all the user IDs and group IDs that we need to fetch
2886+
var (
2887+
uids []uuid.UUID
2888+
gids []uuid.UUID
2889+
)
2890+
for_,ws:=rangeworkspaces {
2891+
// ws.UserACL is a map[id]...
2892+
forid:=rangews.UserACL {
2893+
uid,err:=uuid.Parse(id)
2894+
iferr!=nil {
2895+
api.Logger.Warn(ctx,"found invalid user uuid in workspace acl",slog.Error(err),slog.F("workspace_id",ws.ID))
2896+
continue
2897+
}
2898+
uids=append(uids,uid)
2899+
}
2900+
forid:=rangews.GroupACL {
2901+
gid,err:=uuid.Parse(id)
2902+
iferr!=nil {
2903+
api.Logger.Warn(ctx,"found invalid group uuid in workspace acl",slog.Error(err),slog.F("workspace_id",ws.ID))
2904+
continue
2905+
}
2906+
gids=append(gids,gid)
2907+
}
2908+
}
2909+
2910+
// Fetch the users
2911+
ifuids!=nil {
2912+
uids=slice.Unique(uids)
2913+
2914+
users,err:=api.Database.GetUsersByIDs(ctx,uids)
2915+
iferr!=nil&&!errors.Is(err,sql.ErrNoRows) {
2916+
returnnil,nil,xerrors.Errorf("get users by IDs: %w",err)
2917+
}
2918+
2919+
userData=make(map[string]database.User,len(uids))
2920+
for_,user:=rangeusers {
2921+
userData[user.ID.String()]=user
2922+
}
2923+
}
2924+
2925+
// Fetch the groups
2926+
ifgids!=nil {
2927+
gids=slice.Unique(gids)
2928+
2929+
groupRows,err:=api.Database.GetGroups(ctx, database.GetGroupsParams{GroupIds:gids})
2930+
iferr!=nil&&!errors.Is(err,sql.ErrNoRows) {
2931+
returnnil,nil,xerrors.Errorf("get groups: %w",err)
2932+
}
2933+
2934+
groupData=make(map[string]database.Group,len(gids))
2935+
for_,groupRow:=rangegroupRows {
2936+
groupData[groupRow.Group.ID.String()]=groupRow.Group
2937+
}
2938+
}
2939+
2940+
returnuserData,groupData,nil
2941+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp