Enterprise and team management structure
{ name: string, // Display name slug: string, // URL-safe identifier profile: { // Public profile website?: string, contactEmail: string, // Required for app publishing description?: string, logo?: string }, members: [{ // Organization members user: ObjectId, // Reference to User role: 'admin' | 'member', joinedAt: Date }], pendingInvites: [{ // Unaccepted invitations email: string, role: 'admin' | 'member', token: string, // JWT for acceptance invitedBy: ObjectId, invitedAt: Date, expiresAt: Date, emailSentCount: number, lastEmailSentAt?: Date }] }
// App model references organization { organizationId: ObjectId('org123'), // Previously: developerId: 'user@example.com' }
// Find user's organizations Organization.findByMember(userId) // Check permissions Organization.hasRole(orgId, userId, 'admin') // Validate membership Organization.isMember(orgId, userId)