chore: implement delete organization member (#13589)

Side effects of removing an organization member will orphan their
user resources. These side effects are not addressed here
This commit is contained in:
Steven Masley
2024-06-20 10:06:37 -05:00
committed by GitHub
parent a1ec8ad6e9
commit a1db6d809e
15 changed files with 321 additions and 0 deletions
+10
View File
@@ -1035,6 +1035,16 @@ func (q *querier) DeleteOrganization(ctx context.Context, id uuid.UUID) error {
return deleteQ(q.log, q.auth, q.db.GetOrganizationByID, q.db.DeleteOrganization)(ctx, id)
}
func (q *querier) DeleteOrganizationMember(ctx context.Context, arg database.DeleteOrganizationMemberParams) error {
return deleteQ[database.OrganizationMember](q.log, q.auth, func(ctx context.Context, arg database.DeleteOrganizationMemberParams) (database.OrganizationMember, error) {
member, err := database.ExpectOne(q.OrganizationMembers(ctx, database.OrganizationMembersParams(arg)))
if err != nil {
return database.OrganizationMember{}, err
}
return member.OrganizationMember, nil
}, q.db.DeleteOrganizationMember)(ctx, arg)
}
func (q *querier) DeleteReplicasUpdatedBefore(ctx context.Context, updatedAt time.Time) error {
if err := q.authorizeContext(ctx, policy.ActionDelete, rbac.ResourceSystem); err != nil {
return err
+17
View File
@@ -628,6 +628,23 @@ func (s *MethodTestSuite) TestOrganization() {
rbac.ResourceAssignOrgRole.InOrg(o.ID), policy.ActionAssign,
rbac.ResourceOrganizationMember.InOrg(o.ID).WithID(u.ID), policy.ActionCreate)
}))
s.Run("DeleteOrganizationMember", s.Subtest(func(db database.Store, check *expects) {
o := dbgen.Organization(s.T(), db, database.Organization{})
u := dbgen.User(s.T(), db, database.User{})
member := dbgen.OrganizationMember(s.T(), db, database.OrganizationMember{UserID: u.ID, OrganizationID: o.ID})
check.Args(database.DeleteOrganizationMemberParams{
OrganizationID: o.ID,
UserID: u.ID,
}).Asserts(
// Reads the org member before it tries to delete it
member, policy.ActionRead,
member, policy.ActionDelete).
// SQL Filter returns a 404
WithNotAuthorized("no rows").
WithCancelled("no rows").
Errors(sql.ErrNoRows)
}))
s.Run("UpdateOrganization", s.Subtest(func(db database.Store, check *expects) {
o := dbgen.Organization(s.T(), db, database.Organization{
Name: "something-unique",