Files
BRETT/server/utils/roles.ts
T
2026-10-03 20:07:49 +02:00

29 lines
882 B
TypeScript

import { eq } from 'drizzle-orm'
import { roles, userRoles } from '../db/schema'
export async function getUserRoles(userId: number) {
const rows = await useDb()
.select({ name: roles.name })
.from(userRoles)
.innerJoin(roles, eq(userRoles.roleId, roles.id))
.where(eq(userRoles.userId, userId))
return rows.map(r => r.name)
}
export async function ensureRole(name: string) {
const db = useDb()
const existing = await db.select({ id: roles.id }).from(roles).where(eq(roles.name, name)).limit(1)
if (existing[0]) return existing[0].id
const [result] = await db.insert(roles).values({ name })
return Number(result.insertId)
}
export async function assignRole(userId: number, roleId: number) {
try {
await useDb().insert(userRoles).values({ userId, roleId })
}
catch (err) {
if ((err as { errno?: number }).errno !== 1062) throw err
}
}