feat(ST-l9kkxh2m): CLI-script scripts/create-admin.ts voor admin-bootstrap
- Maakt user aan als die niet bestaat, anders upgrade bestaande user - Upsert ADMIN in user_roles (idempotent) - Helder foutbericht als argumenten ontbreken (process.exit(1)) - package.json scripts: "create-admin": "tsx scripts/create-admin.ts"
This commit is contained in:
parent
a19ae89e37
commit
b760ec625e
2 changed files with 59 additions and 0 deletions
58
scripts/create-admin.ts
Normal file
58
scripts/create-admin.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
// Maak een admin-user aan of upgrade een bestaande user naar ADMIN-rol.
|
||||
//
|
||||
// Gebruik:
|
||||
// npx tsx scripts/create-admin.ts <username> <password>
|
||||
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import { Pool } from 'pg'
|
||||
import { PrismaPg } from '@prisma/adapter-pg'
|
||||
import * as bcrypt from 'bcryptjs'
|
||||
import * as dotenv from 'dotenv'
|
||||
import * as path from 'path'
|
||||
|
||||
const root = path.resolve(__dirname, '..')
|
||||
dotenv.config({ path: path.join(root, '.env.local'), override: true })
|
||||
dotenv.config({ path: path.join(root, '.env') })
|
||||
|
||||
const [username, password] = process.argv.slice(2)
|
||||
|
||||
if (!username || !password) {
|
||||
console.error('Usage: npx tsx scripts/create-admin.ts <username> <password>')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const url = process.env.DIRECT_URL || process.env.DATABASE_URL
|
||||
if (!url) {
|
||||
console.error('Fout: DATABASE_URL is niet ingesteld.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const pool = new Pool({ connectionString: url })
|
||||
const adapter = new PrismaPg(pool)
|
||||
const prisma = new PrismaClient({ adapter })
|
||||
|
||||
async function main() {
|
||||
let user = await prisma.user.findUnique({ where: { username } })
|
||||
|
||||
if (!user) {
|
||||
const password_hash = await bcrypt.hash(password, 12)
|
||||
user = await prisma.user.create({ data: { username, password_hash } })
|
||||
console.log(`Gebruiker '${username}' aangemaakt.`)
|
||||
} else {
|
||||
console.log(`Gebruiker '${username}' gevonden — rol wordt geüpgraded.`)
|
||||
}
|
||||
|
||||
await prisma.userRole.upsert({
|
||||
where: { user_id_role: { user_id: user.id, role: 'ADMIN' } },
|
||||
create: { user_id: user.id, role: 'ADMIN' },
|
||||
update: {},
|
||||
})
|
||||
console.log(`Admin-rol toegewezen aan '${username}'.`)
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((err) => {
|
||||
console.error('Fout:', err.message)
|
||||
process.exit(1)
|
||||
})
|
||||
.finally(() => prisma.$disconnect())
|
||||
Loading…
Add table
Add a link
Reference in a new issue