Disallow delete membership when managed by SCIM
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -142,7 +142,8 @@ export function MemberListItem(props: {
|
|||||||
<Spinner size={16} />
|
<Spinner size={16} />
|
||||||
) : (
|
) : (
|
||||||
membership.canDelete &&
|
membership.canDelete &&
|
||||||
canEditThisRole && (
|
canEditThisRole &&
|
||||||
|
membership.source !== "SCIM" && (
|
||||||
<Button
|
<Button
|
||||||
variant="danger"
|
variant="danger"
|
||||||
onClick={handleRemove}
|
onClick={handleRemove}
|
||||||
|
|||||||
@@ -135,6 +135,18 @@ func (e ErrMembershipInactive) Error() string {
|
|||||||
return fmt.Sprintf("membership %q is inactive", e.MembershipID)
|
return fmt.Sprintf("membership %q is inactive", e.MembershipID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ErrMembershipManagedBySCIM struct {
|
||||||
|
MembershipID gid.GID
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMembershipManagedBySCIMError(membershipID gid.GID) error {
|
||||||
|
return &ErrMembershipManagedBySCIM{MembershipID: membershipID}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e ErrMembershipManagedBySCIM) Error() string {
|
||||||
|
return fmt.Sprintf("membership %q is managed by SCIM and cannot be deleted manually", e.MembershipID)
|
||||||
|
}
|
||||||
|
|
||||||
type ErrOrganizationNotFound struct{ OrganizationID gid.GID }
|
type ErrOrganizationNotFound struct{ OrganizationID gid.GID }
|
||||||
|
|
||||||
func NewOrganizationNotFoundError(organizationID gid.GID) error {
|
func NewOrganizationNotFoundError(organizationID gid.GID) error {
|
||||||
|
|||||||
@@ -253,6 +253,10 @@ func (s *OrganizationService) RemoveMember(
|
|||||||
return NewMembershipNotFoundError(membership.ID)
|
return NewMembershipNotFoundError(membership.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if membership.Source == coredata.MembershipSourceSCIM {
|
||||||
|
return NewMembershipManagedBySCIMError(membershipID)
|
||||||
|
}
|
||||||
|
|
||||||
err := membership.Delete(ctx, tx, scope, membershipID)
|
err := membership.Delete(ctx, tx, scope, membershipID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot delete membership: %w", err)
|
return fmt.Errorf("cannot delete membership: %w", err)
|
||||||
|
|||||||
@@ -967,6 +967,11 @@ func (r *mutationResolver) RemoveMember(ctx context.Context, input types.RemoveM
|
|||||||
|
|
||||||
err := r.iam.OrganizationService.RemoveMember(ctx, input.OrganizationID, input.MembershipID)
|
err := r.iam.OrganizationService.RemoveMember(ctx, input.OrganizationID, input.MembershipID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
var errManagedBySCIM *iam.ErrMembershipManagedBySCIM
|
||||||
|
if errors.As(err, &errManagedBySCIM) {
|
||||||
|
return nil, gqlutils.Conflict(err)
|
||||||
|
}
|
||||||
|
|
||||||
r.logger.ErrorCtx(ctx, "cannot remove member from organization", log.Error(err))
|
r.logger.ErrorCtx(ctx, "cannot remove member from organization", log.Error(err))
|
||||||
return nil, gqlutils.InternalServerError(ctx)
|
return nil, gqlutils.InternalServerError(ctx)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user