[PR #8654] fix(organization): member delete hooks in organization plugin #25023

Open
opened 2026-04-15 22:41:40 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/8654
Author: @GautamBytes
Created: 3/17/2026
Status: 🔄 Open

Base: mainHead: fix/org-member-delete-hook


📝 Commits (4)

  • 3bbf20d fix: run member delete hooks
  • 873c614 fix: harden deleteWithHooks behavior
  • 9d5dfe2 fix: preserve missing delete guard
  • 126ed46 Merge branch 'main' into fix/org-member-delete-hook

📊 Changes

6 files changed (+349 additions, -51 deletions)

View changed files

📝 packages/better-auth/src/db/internal-adapter.ts (+30 -0)
📝 packages/better-auth/src/db/with-hooks.ts (+45 -23)
📝 packages/better-auth/src/plugins/organization/adapter.ts (+53 -26)
📝 packages/better-auth/src/plugins/organization/organization-hook.test.ts (+198 -0)
📝 packages/better-auth/src/plugins/organization/routes/crud-members.ts (+12 -2)
📝 packages/core/src/types/context.ts (+11 -0)

📄 Description

Summary

Fix organization member deletion to use the shared database hook pipeline so databaseHooks.member.delete runs correctly.

Changes

  • route organization member deletion through internalAdapter.deleteWithHooks
  • allow delete hook lookup for plugin models like member
  • preserve team-member cleanup inside the custom delete flow
  • return BAD_REQUEST when member.delete.before blocks deletion
  • cover removeMember, veto behavior, and leaveOrganization with regression tests

Fixes #8653


Summary by cubic

Fix organization member deletion to reliably run the shared DB hook pipeline, so member.delete.before/after fire for both remove and leave flows with veto support. Keeps team cleanup intact and returns a clear error when deletion is blocked.

  • Bug Fixes
    • Exposed internalAdapter.deleteWithHooks on InternalAdapter and enabled delete hooks for plugin models like member.
    • Hardened deleteWithHooks: attempt adapter delete even if lookup fails, pass the correct entity to delete.after (from lookup or custom delete), and return null on veto/no-op.
    • Updated deleteMember to use a hook-aware custom delete that also removes team memberships; ensured hook context includes internalAdapter via runWithAdapter when no store is present.
    • Added guards in removeMember and leaveOrganization to return BAD_REQUEST when deletion is vetoed or a no-op.
    • Added tests for remove, veto, leave, and verifying member.delete.after receives the deleted entity and sees internalAdapter in context.

Written for commit 126ed46552. Summary will update on new commits.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/8654 **Author:** [@GautamBytes](https://github.com/GautamBytes) **Created:** 3/17/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/org-member-delete-hook` --- ### 📝 Commits (4) - [`3bbf20d`](https://github.com/better-auth/better-auth/commit/3bbf20d2ae9665ee1a422fa4e1c0f78da426d0b5) fix: run member delete hooks - [`873c614`](https://github.com/better-auth/better-auth/commit/873c6148ba02a45314f08d7f3f8edd0bce593c5e) fix: harden deleteWithHooks behavior - [`9d5dfe2`](https://github.com/better-auth/better-auth/commit/9d5dfe25d71a242a8dd9918291a2e0c529bb1b35) fix: preserve missing delete guard - [`126ed46`](https://github.com/better-auth/better-auth/commit/126ed465526797c762c33bed95aae53718ec62eb) Merge branch 'main' into fix/org-member-delete-hook ### 📊 Changes **6 files changed** (+349 additions, -51 deletions) <details> <summary>View changed files</summary> 📝 `packages/better-auth/src/db/internal-adapter.ts` (+30 -0) 📝 `packages/better-auth/src/db/with-hooks.ts` (+45 -23) 📝 `packages/better-auth/src/plugins/organization/adapter.ts` (+53 -26) 📝 `packages/better-auth/src/plugins/organization/organization-hook.test.ts` (+198 -0) 📝 `packages/better-auth/src/plugins/organization/routes/crud-members.ts` (+12 -2) 📝 `packages/core/src/types/context.ts` (+11 -0) </details> ### 📄 Description ## Summary Fix organization member deletion to use the shared database hook pipeline so `databaseHooks.member.delete` runs correctly. ## Changes - route organization member deletion through `internalAdapter.deleteWithHooks` - allow delete hook lookup for plugin models like `member` - preserve team-member cleanup inside the custom delete flow - return `BAD_REQUEST` when `member.delete.before` blocks deletion - cover `removeMember`, veto behavior, and `leaveOrganization` with regression tests Fixes #8653 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Fix organization member deletion to reliably run the shared DB hook pipeline, so `member.delete.before/after` fire for both remove and leave flows with veto support. Keeps team cleanup intact and returns a clear error when deletion is blocked. - **Bug Fixes** - Exposed `internalAdapter.deleteWithHooks` on `InternalAdapter` and enabled delete hooks for plugin models like `member`. - Hardened `deleteWithHooks`: attempt adapter delete even if lookup fails, pass the correct entity to `delete.after` (from lookup or custom delete), and return `null` on veto/no-op. - Updated `deleteMember` to use a hook-aware custom delete that also removes team memberships; ensured hook context includes `internalAdapter` via `runWithAdapter` when no store is present. - Added guards in `removeMember` and `leaveOrganization` to return `BAD_REQUEST` when deletion is vetoed or a no-op. - Added tests for remove, veto, leave, and verifying `member.delete.after` receives the deleted entity and sees `internalAdapter` in context. <sup>Written for commit 126ed465526797c762c33bed95aae53718ec62eb. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-15 22:41:40 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#25023