diff --git a/api/src/cli/commands/bootstrap/index.ts b/api/src/cli/commands/bootstrap/index.ts index 8d30bd1be8..ff15bebde7 100644 --- a/api/src/cli/commands/bootstrap/index.ts +++ b/api/src/cli/commands/bootstrap/index.ts @@ -8,6 +8,7 @@ import { getSchema } from '../../../utils/get-schema'; import { RolesService, UsersService, SettingsService } from '../../../services'; import getDatabase, { isInstalled, validateDatabaseConnection, hasDatabaseConnection } from '../../../database'; import { SchemaOverview } from '../../../types'; +import { defaultAdminRole, defaultAdminUser } from '../../utils/defaults'; export default async function bootstrap({ skipAdminInit }: { skipAdminInit?: boolean }): Promise { logger.info('Initializing bootstrap...'); @@ -65,7 +66,7 @@ async function waitForDatabase(database: Knex) { async function createDefaultAdmin(schema: SchemaOverview) { logger.info('Setting up first admin role...'); const rolesService = new RolesService({ schema }); - const role = await rolesService.createOne({ name: 'Admin', admin_access: true }); + const role = await rolesService.createOne(defaultAdminRole); logger.info('Adding first admin user...'); const usersService = new UsersService({ schema }); @@ -84,5 +85,5 @@ async function createDefaultAdmin(schema: SchemaOverview) { logger.info(`No admin password provided. Defaulting to "${adminPassword}"`); } - await usersService.createOne({ email: adminEmail, password: adminPassword, role }); + await usersService.createOne({ email: adminEmail, password: adminPassword, role, ...defaultAdminUser }); } diff --git a/api/src/cli/commands/init/index.ts b/api/src/cli/commands/init/index.ts index 3978c7480c..c0232737e4 100644 --- a/api/src/cli/commands/init/index.ts +++ b/api/src/cli/commands/init/index.ts @@ -11,6 +11,7 @@ import createEnv from '../../utils/create-env'; import { drivers, getDriverForClient } from '../../utils/drivers'; import { databaseQuestions } from './questions'; import { generateHash } from '../../../utils/generate-hash'; +import { defaultAdminRole, defaultAdminUser } from '../../utils/defaults'; export default async function init(): Promise { const rootPath = process.cwd(); @@ -94,20 +95,15 @@ export default async function init(): Promise { await db('directus_roles').insert({ id: roleID, - name: 'Administrator', - icon: 'verified', - admin_access: true, - description: 'Initial administrative role with unrestricted App/API access', + ...defaultAdminRole, }); await db('directus_users').insert({ id: userID, - status: 'active', email: firstUser.email, password: firstUser.password, - first_name: 'Admin', - last_name: 'User', role: roleID, + ...defaultAdminUser, }); await db.destroy(); diff --git a/api/src/cli/utils/defaults.ts b/api/src/cli/utils/defaults.ts new file mode 100644 index 0000000000..38ea43502d --- /dev/null +++ b/api/src/cli/utils/defaults.ts @@ -0,0 +1,12 @@ +export const defaultAdminRole = { + name: 'Administrator', + icon: 'verified', + admin_access: true, + description: '$t:admin_description', +}; + +export const defaultAdminUser = { + status: 'active', + first_name: 'Admin', + last_name: 'User', +}; diff --git a/app/src/composables/use-item/use-item.ts b/app/src/composables/use-item/use-item.ts index caf5957921..3929321ed5 100644 --- a/app/src/composables/use-item/use-item.ts +++ b/app/src/composables/use-item/use-item.ts @@ -292,7 +292,10 @@ export function useItem(collection: Ref, primaryKey: Ref { return { - ...role, + ...translate(role), count: role.users[0]?.count.id || 0, }; }),