[PR #5927] Store activeOrganizationSlug and activeOrganizationRole in Session by Default #6330

Open
opened 2026-03-13 12:55:06 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/5927
Author: @Ridhim-RR
Created: 11/12/2025
Status: 🔄 Open

Base: canaryHead: feat/add-slug-role-in-session


📝 Commits (8)

  • edf12f8 Store activeOrganizationSlug and activeOrganizationRole in Session by Default (#5706)
  • 2a9f4f7 Merge branch 'canary' into feat/add-slug-role-in-session
  • 720b5b7 chore: fix unsorted import and export statements
  • 02c4d16 bulk session update handled
  • 802c9ce test case issue
  • 6832140 chore: format-issue
  • 66fd63c fix: prisma snapshot
  • 480942c Merge branch 'canary' into feat/add-slug-role-in-session

📊 Changes

10 files changed (+839 additions, -27 deletions)

View changed files

📝 packages/better-auth/src/plugins/organization/adapter.ts (+22 -3)
📝 packages/better-auth/src/plugins/organization/call.ts (+4 -0)
📝 packages/better-auth/src/plugins/organization/organization.test.ts (+413 -6)
📝 packages/better-auth/src/plugins/organization/organization.ts (+55 -0)
📝 packages/better-auth/src/plugins/organization/routes/crud-members.test.ts (+214 -1)
📝 packages/better-auth/src/plugins/organization/routes/crud-members.ts (+53 -5)
📝 packages/better-auth/src/plugins/organization/routes/crud-org.ts (+56 -2)
📝 packages/better-auth/src/plugins/organization/schema.ts (+8 -0)
📝 packages/better-auth/src/plugins/organization/types.ts (+2 -0)
📝 packages/cli/test/__snapshots__/schema-mysql-custom.prisma (+12 -10)

📄 Description

Closes #5706

Summary

This PR adds activeOrganizationSlug and activeOrganizationRole to the session schema, enabling performance optimizations and improved developer experience when working with active organizations.

Changes

Schema Updates

  • Added activeOrganizationSlug and activeOrganizationRole fields to session schema (schema.ts, organization.ts)
  • Updated TypeScript types in middleware (call.ts)

Endpoint Updates

  • setActiveOrganization: Now populates slug and role when setting active organization
  • createOrganization: Sets slug and role in session when creating and activating new organization
  • updateOrganization: Updates session slug when active organization's slug changes
  • updateMemberRole: Updates session role when current user's role in active organization changes
  • removeMember / leaveOrganization: Clears session fields when user is removed/leaves active organization

Performance Optimizations

  • getActiveMemberRole: Uses session role when querying current user's active organization (avoids DB query)
  • hasPermission: Uses session role when checking permissions for current user's active organization (avoids DB query)

Testing

  • Added test cases for session updates on organization operations
  • Added performance optimization tests for getActiveMemberRole and hasPermission
  • Updated existing tests to verify session fields are properly maintained

Benefits

  1. Performance: Reduces database queries by using session data for common operations
  2. UX: Slug available immediately for URL routing without additional queries
  3. Developer Experience: Role and slug accessible directly from session
  4. Cookie Efficiency: Reduces need for separate API calls to fetch organization details

Migration

Run database migrations to add the new session fields:

npx @better-auth/cli@latest migrate

Breaking Changes

None - fields are optional and backward compatible.


Summary by cubic

Stores activeOrganizationSlug and activeOrganizationRole in the session and keeps them in sync across org actions, enabling faster permission checks and role lookups by avoiding extra DB queries.

  • New Features

    • Added activeOrganizationSlug and activeOrganizationRole to the session schema and middleware types.
    • Updated createOrganization, setActiveOrganization (by id or slug), updateOrganization (slug changes), updateMemberRole, removeMember, leaveOrganization, and delete to update or clear these session fields and cookies.
    • Optimized hasPermission and getActiveMemberRole to use session role when the active org matches, reducing database reads. When dynamicAccessControl is enabled, hasPermission falls back to DB lookups.
  • Migration

    • Run: npx @better-auth/cli@latest migrate to add the new session fields.

Written for commit 480942c6de. Summary will update automatically 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/5927 **Author:** [@Ridhim-RR](https://github.com/Ridhim-RR) **Created:** 11/12/2025 **Status:** 🔄 Open **Base:** `canary` ← **Head:** `feat/add-slug-role-in-session` --- ### 📝 Commits (8) - [`edf12f8`](https://github.com/better-auth/better-auth/commit/edf12f8e0be4bcc15740d014489f2a76cc8596d1) Store activeOrganizationSlug and activeOrganizationRole in Session by Default (#5706) - [`2a9f4f7`](https://github.com/better-auth/better-auth/commit/2a9f4f7334c909cca260698b1f4bd345ea198872) Merge branch 'canary' into feat/add-slug-role-in-session - [`720b5b7`](https://github.com/better-auth/better-auth/commit/720b5b7f2c5c77be9ab3ba3bf4169801bdcf1a5a) chore: fix unsorted import and export statements - [`02c4d16`](https://github.com/better-auth/better-auth/commit/02c4d16bb6e0bad7dc34506d383da1fa377c7d18) bulk session update handled - [`802c9ce`](https://github.com/better-auth/better-auth/commit/802c9ce19f64ddaf15db27d098d86532610334bc) test case issue - [`6832140`](https://github.com/better-auth/better-auth/commit/6832140cd4b68e93a85895ad42197542beb454cd) chore: format-issue - [`66fd63c`](https://github.com/better-auth/better-auth/commit/66fd63ccc51eb71742067f22a687aebe2e225a91) fix: prisma snapshot - [`480942c`](https://github.com/better-auth/better-auth/commit/480942c6deaa6513231d1dcc0b8b8c9983fc474e) Merge branch 'canary' into feat/add-slug-role-in-session ### 📊 Changes **10 files changed** (+839 additions, -27 deletions) <details> <summary>View changed files</summary> 📝 `packages/better-auth/src/plugins/organization/adapter.ts` (+22 -3) 📝 `packages/better-auth/src/plugins/organization/call.ts` (+4 -0) 📝 `packages/better-auth/src/plugins/organization/organization.test.ts` (+413 -6) 📝 `packages/better-auth/src/plugins/organization/organization.ts` (+55 -0) 📝 `packages/better-auth/src/plugins/organization/routes/crud-members.test.ts` (+214 -1) 📝 `packages/better-auth/src/plugins/organization/routes/crud-members.ts` (+53 -5) 📝 `packages/better-auth/src/plugins/organization/routes/crud-org.ts` (+56 -2) 📝 `packages/better-auth/src/plugins/organization/schema.ts` (+8 -0) 📝 `packages/better-auth/src/plugins/organization/types.ts` (+2 -0) 📝 `packages/cli/test/__snapshots__/schema-mysql-custom.prisma` (+12 -10) </details> ### 📄 Description Closes #5706 ## Summary This PR adds `activeOrganizationSlug` and `activeOrganizationRole` to the session schema, enabling performance optimizations and improved developer experience when working with active organizations. ## Changes ### Schema Updates - Added `activeOrganizationSlug` and `activeOrganizationRole` fields to session schema (`schema.ts`, `organization.ts`) - Updated TypeScript types in middleware (`call.ts`) ### Endpoint Updates - **`setActiveOrganization`**: Now populates slug and role when setting active organization - **`createOrganization`**: Sets slug and role in session when creating and activating new organization - **`updateOrganization`**: Updates session slug when active organization's slug changes - **`updateMemberRole`**: Updates session role when current user's role in active organization changes - **`removeMember`** / **`leaveOrganization`**: Clears session fields when user is removed/leaves active organization ### Performance Optimizations - **`getActiveMemberRole`**: Uses session role when querying current user's active organization (avoids DB query) - **`hasPermission`**: Uses session role when checking permissions for current user's active organization (avoids DB query) ### Testing - Added test cases for session updates on organization operations - Added performance optimization tests for `getActiveMemberRole` and `hasPermission` - Updated existing tests to verify session fields are properly maintained ## Benefits 1. **Performance**: Reduces database queries by using session data for common operations 2. **UX**: Slug available immediately for URL routing without additional queries 3. **Developer Experience**: Role and slug accessible directly from session 4. **Cookie Efficiency**: Reduces need for separate API calls to fetch organization details ## Migration Run database migrations to add the new session fields: ```bash npx @better-auth/cli@latest migrate ``` ## Breaking Changes None - fields are optional and backward compatible. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Stores activeOrganizationSlug and activeOrganizationRole in the session and keeps them in sync across org actions, enabling faster permission checks and role lookups by avoiding extra DB queries. - **New Features** - Added activeOrganizationSlug and activeOrganizationRole to the session schema and middleware types. - Updated createOrganization, setActiveOrganization (by id or slug), updateOrganization (slug changes), updateMemberRole, removeMember, leaveOrganization, and delete to update or clear these session fields and cookies. - Optimized hasPermission and getActiveMemberRole to use session role when the active org matches, reducing database reads. When dynamicAccessControl is enabled, hasPermission falls back to DB lookups. - **Migration** - Run: npx @better-auth/cli@latest migrate to add the new session fields. <sup>Written for commit 480942c6deaa6513231d1dcc0b8b8c9983fc474e. Summary will update automatically 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-03-13 12:55:06 -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#6330