Add role field to invites, apply role on acceptance

This commit is contained in:
2026-01-28 18:46:03 +00:00
parent ed99c14212
commit 86df62ba63
3 changed files with 8 additions and 0 deletions

View File

@@ -61,6 +61,7 @@ export const invites = pgTable('invites', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
email: text('email').notNull(), email: text('email').notNull(),
name: text('name').notNull(), name: text('name').notNull(),
role: text('role').default('user'), // Role to assign on acceptance: admin, user
token: text('token').notNull().unique(), token: text('token').notNull().unique(),
invitedBy: text('invited_by').references(() => users.id, { onDelete: 'set null' }), invitedBy: text('invited_by').references(() => users.id, { onDelete: 'set null' }),
status: inviteStatusEnum('status').default('pending').notNull(), status: inviteStatusEnum('status').default('pending').notNull(),

View File

@@ -115,6 +115,7 @@ export const adminRoutes = new Elysia({ prefix: '/admin' })
const [invite] = await db.insert(invites).values({ const [invite] = await db.insert(invites).values({
email: body.email, email: body.email,
name: body.name, name: body.name,
role: body.role || 'user',
token, token,
invitedBy: (user as User).id, invitedBy: (user as User).id,
expiresAt, expiresAt,
@@ -149,6 +150,7 @@ export const adminRoutes = new Elysia({ prefix: '/admin' })
body: t.Object({ body: t.Object({
email: t.String({ format: 'email' }), email: t.String({ format: 'email' }),
name: t.String({ minLength: 1 }), name: t.String({ minLength: 1 }),
role: t.Optional(t.Union([t.Literal('admin'), t.Literal('user')])),
}), }),
}) })

View File

@@ -75,6 +75,11 @@ export const authRoutes = new Elysia({ prefix: '/auth' })
}); });
if (newUser) { if (newUser) {
// Set role from invite if specified
if (invite.role && invite.role !== 'user') {
await db.update(users).set({ role: invite.role }).where(eq(users.id, newUser.id));
}
// Create default inbox project // Create default inbox project
await db.insert(projects).values({ await db.insert(projects).values({
userId: newUser.id, userId: newUser.id,