Add multi-tenancy with Teams feature
This commit is contained in:
59
CHANGELOG.md
59
CHANGELOG.md
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- Added team-based multi-tenancy for organizing projects and collaboration (#88-#104)
|
||||
- Teams serve as organizational containers for projects
|
||||
- Users can belong to multiple teams with different roles (owner, admin, member)
|
||||
- Projects can optionally belong to a team
|
||||
- Added database schema for teams (#88):
|
||||
- `teams` table with id, name, slug, description, settings, timestamps
|
||||
- `team_memberships` table mapping users to teams with roles
|
||||
- `team_id` column on projects table for team association
|
||||
- Migrations `009_teams.sql` and `009b_migrate_projects.sql`
|
||||
- Added Team and TeamMembership ORM models with relationships (#89)
|
||||
- Added TeamAuthorizationService for team-level access control (#90):
|
||||
- Team owner/admin gets admin access to all team projects
|
||||
- Team member gets read access to team projects (upgradeable by explicit permission)
|
||||
- Role hierarchy: owner > admin > member
|
||||
- Added Team API endpoints (#92, #93, #94, #95):
|
||||
- `GET /api/v1/teams` - List teams user belongs to (paginated)
|
||||
- `POST /api/v1/teams` - Create team (creator becomes owner)
|
||||
- `GET /api/v1/teams/{slug}` - Get team details
|
||||
- `PUT /api/v1/teams/{slug}` - Update team (requires admin)
|
||||
- `DELETE /api/v1/teams/{slug}` - Delete team (requires owner)
|
||||
- `GET /api/v1/teams/{slug}/members` - List team members
|
||||
- `POST /api/v1/teams/{slug}/members` - Add member (requires admin)
|
||||
- `PUT /api/v1/teams/{slug}/members/{username}` - Update member role
|
||||
- `DELETE /api/v1/teams/{slug}/members/{username}` - Remove member
|
||||
- `GET /api/v1/teams/{slug}/projects` - List team projects (paginated)
|
||||
- Updated project creation to support optional team assignment (#95)
|
||||
- Updated project responses to include team info (team_id, team_slug, team_name)
|
||||
- Added frontend team management (#97-#104):
|
||||
- TeamContext provider for managing current team selection
|
||||
- TeamSelector dropdown component (persists selection in localStorage)
|
||||
- Teams list page at `/teams`
|
||||
- Team dashboard page at `/teams/{slug}` with inline project creation
|
||||
- Team settings page at `/teams/{slug}/settings`
|
||||
- Team members page at `/teams/{slug}/members`
|
||||
- Teams navigation link in header (authenticated users only)
|
||||
- Updated seed data to create a "Demo Team" and assign all seed projects to it
|
||||
- Added TypeScript types and API client functions for teams
|
||||
- Access management now shows team-based permissions alongside explicit permissions
|
||||
- Team-based access displayed as read-only with "Source" column indicating origin
|
||||
- Team members with access show team slug and role
|
||||
- Added integration tests for team CRUD, membership, and project operations
|
||||
- Redesigned teams portal with modern card-based layout
|
||||
- Card grid view with team avatar, name, slug, role badge, and stats
|
||||
- Stats bar showing total teams, owned teams, and total projects
|
||||
- Search functionality for filtering teams (appears when >3 teams)
|
||||
- Empty states for no teams and no search results
|
||||
- Added user autocomplete component for team member invitations
|
||||
- `GET /api/v1/users/search` endpoint for username prefix search
|
||||
- Dropdown shows matching users as you type
|
||||
- Keyboard navigation support (arrow keys, enter, escape)
|
||||
- Debounced search to reduce API calls
|
||||
- Added unit tests for TeamAuthorizationService
|
||||
- Added `ORCHARD_ADMIN_PASSWORD` environment variable to configure initial admin password (#87)
|
||||
- When set, admin user is created with the specified password (no password change required)
|
||||
- When not set, defaults to `changeme123` and requires password change on first login
|
||||
@@ -53,6 +105,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Added pre-test stage reset to ensure known environment state before integration tests (#54)
|
||||
- Upload endpoint now accepts optional `ensure` file parameter for declaring dependencies
|
||||
- Updated upload API documentation with ensure file format and examples
|
||||
- Converted teams list and team projects to use DataTable component for consistent styling
|
||||
- Centered team members and team settings page content
|
||||
- Added orchard logo icon and dot separator to footer
|
||||
|
||||
### Fixed
|
||||
- Fixed dark theme styling for team pages - modals, forms, and dropdowns now use correct theme variables
|
||||
- Fixed UserAutocomplete and TeamSelector dropdown backgrounds for dark theme
|
||||
|
||||
## [0.5.1] - 2026-01-23
|
||||
### Changed
|
||||
|
||||
Reference in New Issue
Block a user