typescript Strapi v4:在strapi中引导时创建管理员并添加角色和权限

7gcisfzg  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(150)

项目是基于Typescript Bootstrap的所有数据用于开发目的,这样,无论是谁在项目上新的工作将不需要插入strapi管理面板中的所有数据。插入一个新的数据工作正常,但只有当有管理员用户创建。我无法从代码中创建管理员和角色,请帮助。
下面是bootsrap函数,目前我正在处理.db文件,其中已经填充了管理员和角色的定义数据。这种方法的问题是没有对数据的控制。需要从下面的代码中填充管理员和角色数据,我已经完成了主页
`

async bootstrap() {
    try {
      const isFirst = await isFirstRun();

      if (isFirst && process.env.NODE_ENV === 'development') {
        await fs.copyFileSync('./data/data.db', './.tmp/data.db');
        const data = await getHomePage();
        await strapi.services['api::home-page.home-page'].createOrUpdate({
          data,
        });

        console.log(
          '\x1b[32m%s\x1b[0m',
          `Development data copied successfully \nAdmin:${process.env.ADMIN} \npassword: ${process.env.ADMIN_PASS}`,
        );
      }
    } catch (e) {
      console.log(e);
    }
  },
};

字符串
`
尝试了https://github.com/strapi/strapi/issues/3365,但它不适合我。尝试了其他解决方案,但不适用于strapi v4

sg2wtvxw

sg2wtvxw1#

您应该使用admin::user服务(有关服务使用的文档)来创建管理员:

// src/bootstrap.ts
export async function bootstrap({ strapi }: { strapi: Strapi }) {

  // ...

  const hasAdmin = await strapi.service("admin::user").exists();

  if (hasAdmin) {
    console.log("Admin already created, skipping...");
    return;
  }

  const superAdminRole = await strapi.service("admin::role").getSuperAdmin();

  await strapi.service("admin::user").create({
    email: "[email protected]",
    firstname: "Test",
    lastname: "Admin",
    password: "password",
    registrationToken: null,
    isActive: true,
    roles: [superAdminRole.id],
  });

  // ...
}

字符串
类似地,要创建新的管理员角色,请使用admin:role服务:

await strapi.service("admin::role").create({
  name: "Custom Editor",
  code: "custom-editor",
  description: "Custom editor role.",
});

相关问题