From 31bb8904962cbfce234bf21166edc9d2f02fcfb3 Mon Sep 17 00:00:00 2001 From: Azri Kahar <42867097+azrikahar@users.noreply.github.com> Date: Tue, 14 Dec 2021 22:33:44 +0800 Subject: [PATCH] Unify & translate initial role/user detail in `init` & `bootstrap` command (#10493) * Unify initial role/user detail in init & bootstrap * translate role descriptions * translate data from system collections --- api/src/cli/commands/bootstrap/index.ts | 5 +++-- api/src/cli/commands/init/index.ts | 10 +++------- api/src/cli/utils/defaults.ts | 12 ++++++++++++ app/src/composables/use-item/use-item.ts | 5 ++++- app/src/lang/translations/en-US.yaml | 1 + app/src/modules/settings/routes/roles/collection.vue | 3 ++- 6 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 api/src/cli/utils/defaults.ts 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, }; }),