UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

51 lines (50 loc) 1.87 kB
import { useEnv } from '@directus/env'; import { useLogger } from '../logger/index.js'; import { AccessService } from '../services/access.js'; import { UsersService } from '../services/index.js'; import { PoliciesService } from '../services/policies.js'; import { RolesService } from '../services/roles.js'; export const defaultAdminRole = { name: 'Administrator', icon: 'verified', description: '$t:admin_description', }; export const defaultAdminUser = { status: 'active', first_name: 'Admin', last_name: 'User', }; export const defaultAdminPolicy = { name: 'Administrator', icon: 'verified', admin_access: true, app_access: true, description: '$t:admin_description', }; export async function createAdmin(schema, admin) { const logger = useLogger(); const env = useEnv(); logger.info('Setting up first admin role...'); const accessService = new AccessService({ schema }); const policiesService = new PoliciesService({ schema }); const rolesService = new RolesService({ schema }); const role = await rolesService.createOne(defaultAdminRole); const policy = await policiesService.createOne(defaultAdminPolicy); await accessService.createOne({ policy, role }); const usersService = new UsersService({ schema }); const adminEmail = admin?.email ?? env['ADMIN_EMAIL']; const adminPassword = admin?.password ?? env['ADMIN_PASSWORD']; if (!adminEmail || !adminPassword) return; const token = env['ADMIN_TOKEN'] ?? null; logger.info('Adding first admin user...'); await usersService.createOne({ ...defaultAdminUser, first_name: admin?.first_name ?? defaultAdminUser.first_name, last_name: admin?.last_name ?? defaultAdminUser.last_name, email: adminEmail, password: adminPassword, token, role, }); }