From ef7fcf39301071cc4b4af5c9350d0f9c556bfd7d Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 29 Aug 2024 13:48:28 -0800 Subject: [PATCH] fix: include dormant users in template acl query (#14461) The issue is that if you add a user and then immediately go to give them permissions, you can add them but they will not show up in the UI. They also do not show up in the audit log entry. --- coderd/database/modelqueries.go | 2 +- enterprise/coderd/templates_test.go | 40 +++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/coderd/database/modelqueries.go b/coderd/database/modelqueries.go index 3dc894cda7..c2061adf13 100644 --- a/coderd/database/modelqueries.go +++ b/coderd/database/modelqueries.go @@ -167,7 +167,7 @@ func (q *sqlQuerier) GetTemplateUserRoles(ctx context.Context, id uuid.UUID) ([] WHERE users.deleted = false AND - users.status = 'active'; + users.status != 'suspended'; ` var tus []TemplateUser diff --git a/enterprise/coderd/templates_test.go b/enterprise/coderd/templates_test.go index 782132f5d3..8769bba2f0 100644 --- a/enterprise/coderd/templates_test.go +++ b/enterprise/coderd/templates_test.go @@ -1025,6 +1025,46 @@ func TestTemplateACL(t *testing.T) { require.Len(t, acl.Users, 0, "deleted users should be filtered") }) + // Test that we do not filter dormant users. + t.Run("IncludeDormantUsers", func(t *testing.T) { + t.Parallel() + + client, user := coderdenttest.New(t, &coderdenttest.Options{LicenseOptions: &coderdenttest.LicenseOptions{ + Features: license.Features{ + codersdk.FeatureTemplateRBAC: 1, + }, + }}) + anotherClient, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleTemplateAdmin(), rbac.RoleUserAdmin()) + + ctx := testutil.Context(t, testutil.WaitLong) + + // nolint:gocritic // Must use owner to create user. + user1, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ + Email: "coder@coder.com", + Username: "coder", + Password: "SomeStrongPassword!", + OrganizationIDs: []uuid.UUID{user.OrganizationID}, + }) + require.NoError(t, err) + require.Equal(t, codersdk.UserStatusDormant, user1.Status) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + + err = anotherClient.UpdateTemplateACL(ctx, template.ID, codersdk.UpdateTemplateACL{ + UserPerms: map[string]codersdk.TemplateRole{ + user1.ID.String(): codersdk.TemplateRoleUse, + }, + }) + require.NoError(t, err) + + acl, err := anotherClient.TemplateACL(ctx, template.ID) + require.NoError(t, err) + require.Contains(t, acl.Users, codersdk.TemplateUser{ + User: user1, + Role: codersdk.TemplateRoleUse, + }) + }) + // Test that we do not return suspended users. t.Run("FilterSuspendedUsers", func(t *testing.T) { t.Parallel()