UNPKG

@shagital/adonisjs-crud-generator

Version:

Adonisjs Admin Panel Generator is a package that helps you quickly scaffold your typical CRUD admin interfaces. It generates the admin panel code based on the existing (migrated) table in the database

88 lines (70 loc) 2.29 kB
import {{userModel}} from '{{userModelNamespace}}' import Hash from '@ioc:Adonis/Core/Hash' import Permission from 'App/Models/Permission' import Role from 'App/Models/Role' import BaseSchema from '@ioc:Adonis/Lucid/Schema' import Config from '@ioc:Adonis/Core/Config' import UserRole from 'App/Models/UserRole' import RolePermission from 'App/Models/RolePermission' /** * Class FillDefaultAdminUserAndPermissions */ export default class FillDefaultAdminUserAndPermissions extends BaseSchema { public async up() { let roleName = Config.get('crudGenerator.admin_role', 'administrator'); let user = { email: Config.get('crudGenerator.admin_email', 'administrator@webmail.com'), password: {{password}} } let requiredColumns = User.$columnsDefinitions requiredColumns.forEach(({ columnName }) => { if (!user.hasOwnProperty(columnName) && columnName !== User.primaryKey) { user[columnName] = '' } }) let permissions = [ // view admin as a whole 'admin', // manage translations 'admin.translation.index', 'admin.translation.edit', 'admin.translation.rescan', // manage users (access) 'admin.admin-user.index', 'admin.admin-user.create', 'admin.admin-user.edit', 'admin.admin-user.delete', // ability to upload 'admin.upload', //ability to impersonal login 'admin.admin-user.impersonal-login' ].map((s) => { return { name: s, slug: s } }) let adminUser = await {{model}}.firstOrCreate({email: user.email}, user); await {{model}}.query() .where('id', adminUser.id) .update({password: await Hash.make(user.password)}) let permissionIds: Array<number> = []; for(let p of permissions) { let permission = await Permission.firstOrCreate({name: p.name}, p); permissionIds.push(permission.id) } let role = await Role.firstOrCreate({slug:roleName}, {name:roleName, slug:roleName}); await RolePermission.createMany( permissionIds.map((id) => { return { role_id: role.id, permission_id: id, } }) ) await UserRole.create({ user_id: adminUser.id, role_id: role.id }) } public async down() { } }