From df4609825a2ce09ea934bcdaaf06015acf767283 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 27 Aug 2024 14:56:38 -0800 Subject: [PATCH] fix: include dormant users in template acl query 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 83763ca55ec92..0cc1d82c73003 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 782132f5d3ba2..8769bba2f0c01 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()