[PR #5718] feat: team roles #14422

Open
opened 2026-04-13 09:28:00 -05:00 by GiteaMirror · 0 comments
Owner

Original Pull Request: https://github.com/better-auth/better-auth/pull/5718

State: open
Merged: No


Summary

Extends the organization plugin to support team-level roles, enabling fine-grained access control within teams. Team members can now be assigned specific roles (e.g., admin, member, viewer) with customizable permissions.

💡 Usage Example

const auth = betterAuth({
  plugins: [
    organization({
      teamRoles: {
        roles: {
          admin: { permissions: ["teamMember:*"] },
          member: { permissions: ["teamMember:read"] },
          viewer: { permissions: [] }
        },
        defaultRole: "member",
        creatorRole: "admin"
      }
    })
  ]
})

Running Tests

pnpm i
cd packages/better-auth
pnpm test src/plugins/organization/team-roles.test.ts 

Summary by cubic

Adds team-level roles to the organization plugin so teams can assign and enforce roles per member. Introduces APIs to update and read team member roles, with defaults and creator-as-admin behavior.

  • New Features
    • Configurable team roles via options.teams.teamRoles (roles, defaultRole=member, creatorRole=admin).
    • Team creators are automatically added as team admins.
    • addTeamMember accepts an optional role and falls back to default when omitted.
    • New endpoints: POST /organization/update-team-member-role and GET /organization/get-team-member.
    • hasPermission accepts an optional teamId to check team-scoped permissions, falling back to org role when not a team member.
    • Access control includes teamMember permissions (create, update, delete, read) and new error codes for role updates and visibility.
    • Team member schema now includes a role field (default "member").

Written for commit 0ef88710bf. Summary will update automatically on new commits.

**Original Pull Request:** https://github.com/better-auth/better-auth/pull/5718 **State:** open **Merged:** No --- ## Summary Extends the organization plugin to support team-level roles, enabling fine-grained access control within teams. Team members can now be assigned specific roles (e.g., admin, member, viewer) with customizable permissions. ## 💡 Usage Example ```typescript const auth = betterAuth({ plugins: [ organization({ teamRoles: { roles: { admin: { permissions: ["teamMember:*"] }, member: { permissions: ["teamMember:read"] }, viewer: { permissions: [] } }, defaultRole: "member", creatorRole: "admin" } }) ] }) ``` ## Running Tests ``` pnpm i cd packages/better-auth pnpm test src/plugins/organization/team-roles.test.ts ``` <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds team-level roles to the organization plugin so teams can assign and enforce roles per member. Introduces APIs to update and read team member roles, with defaults and creator-as-admin behavior. - **New Features** - Configurable team roles via options.teams.teamRoles (roles, defaultRole=member, creatorRole=admin). - Team creators are automatically added as team admins. - addTeamMember accepts an optional role and falls back to default when omitted. - New endpoints: POST /organization/update-team-member-role and GET /organization/get-team-member. - hasPermission accepts an optional teamId to check team-scoped permissions, falling back to org role when not a team member. - Access control includes teamMember permissions (create, update, delete, read) and new error codes for role updates and visibility. - Team member schema now includes a role field (default "member"). <sup>Written for commit 0ef88710bf5ac06690bbc5a1f8bf16f06a52cb7f. Summary will update automatically on new commits.</sup> <!-- End of auto-generated description by cubic. -->
GiteaMirror added the pull-request label 2026-04-13 09:28:00 -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#14422