@udhuong/admin-core 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,5 +15,6 @@ export declare class RootAccountService implements OnModuleInit {
15
15
  constructor(authUserService: AuthUserService, coreOptions: AdminCoreOptions, authUserRepo: Repository<AuthUserEntity>, roleRepo: Repository<RoleEntity>, userRoleRepo: Repository<UserRoleEntity>);
16
16
  onModuleInit(): Promise<void>;
17
17
  private seedRootAccount;
18
+ private ensureSuperAdminRole;
18
19
  }
19
20
  //# sourceMappingURL=root-account.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-account.service.d.ts","sourceRoot":"","sources":["../../../../../src/server/auth/infrastructure/services/root-account.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAU,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAsB,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAQ7F,qBACa,kBAAmB,YAAW,YAAY;IAInD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAX/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,eAAe,EAAE,eAAe,EAEhC,WAAW,EAAE,gBAAgB,EAE7B,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,EAExC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,EAEhC,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC;IAGrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAIrB,eAAe;CAgD9B"}
1
+ {"version":3,"file":"root-account.service.d.ts","sourceRoot":"","sources":["../../../../../src/server/auth/infrastructure/services/root-account.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAU,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAsB,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAQ7F,qBACa,kBAAmB,YAAW,YAAY;IAInD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAX/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,eAAe,EAAE,eAAe,EAEhC,WAAW,EAAE,gBAAgB,EAE7B,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,EAExC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,EAEhC,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC;IAGrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAIrB,eAAe;YA0Cf,oBAAoB;CAenC"}
@@ -45,36 +45,43 @@ let RootAccountService = RootAccountService_1 = class RootAccountService {
45
45
  const existing = await this.authUserRepo.findOne({
46
46
  where: { email: rootEmail },
47
47
  });
48
+ let rootUserId;
48
49
  if (existing) {
49
50
  this.logger.log(`Root account already exists: ${rootEmail}`);
50
- return;
51
- }
52
- const rootPassword = this.coreOptions.rootPassword ?? process.env.ROOT_PASSWORD;
53
- if (!rootPassword || rootPassword.length < 12) {
54
- throw new Error(`[RootAccountService] Thiếu hoặc quá ngắn (<12 ký tự) rootPassword. ` +
55
- `Cung cấp qua AdminCoreOptions.rootPassword hoặc env var ROOT_PASSWORD. ` +
56
- `Gợi ý: dùng mật khẩu strong (ví dụ \`openssl rand -base64 24\`).`);
51
+ rootUserId = existing.id;
57
52
  }
58
- const rootUser = await this.authUserService.create({
59
- email: rootEmail,
60
- password: rootPassword,
61
- displayName: 'Root',
62
- username: 'root',
63
- });
64
- await this.authUserService.verifyEmail(rootUser.id);
65
- const superAdminRole = await this.roleRepo.findOne({
66
- where: { name: ROOT_ROLE },
67
- });
68
- if (superAdminRole) {
69
- await this.userRoleRepo.save({
70
- userId: rootUser.id,
71
- roleId: superAdminRole.id,
53
+ else {
54
+ const rootPassword = this.coreOptions.rootPassword ?? process.env.ROOT_PASSWORD;
55
+ if (!rootPassword || rootPassword.length < 12) {
56
+ throw new Error(`[RootAccountService] Thiếu hoặc quá ngắn (<12 ký tự) rootPassword. ` +
57
+ `Cung cấp qua AdminCoreOptions.rootPassword hoặc env var ROOT_PASSWORD. ` +
58
+ `Gợi ý: dùng mật khẩu strong (ví dụ \`openssl rand -base64 24\`).`);
59
+ }
60
+ const rootUser = await this.authUserService.create({
61
+ email: rootEmail,
62
+ password: rootPassword,
63
+ displayName: 'Root',
64
+ username: 'root',
72
65
  });
73
- this.logger.log(`Root account created and assigned role "${ROOT_ROLE}": ${rootEmail}`);
66
+ await this.authUserService.verifyEmail(rootUser.id);
67
+ rootUserId = rootUser.id;
68
+ this.logger.log(`Root account created: ${rootEmail}`);
74
69
  }
75
- else {
76
- this.logger.warn(`Role "${ROOT_ROLE}" not found. Root account created without role.`);
70
+ await this.ensureSuperAdminRole(rootUserId, rootEmail);
71
+ }
72
+ async ensureSuperAdminRole(userId, email) {
73
+ const superAdminRole = await this.roleRepo.findOne({ where: { name: ROOT_ROLE } });
74
+ if (!superAdminRole) {
75
+ this.logger.warn(`Role "${ROOT_ROLE}" not found. Root account may lack permissions.`);
76
+ return;
77
77
  }
78
+ const existing = await this.userRoleRepo.findOne({
79
+ where: { userId, roleId: superAdminRole.id },
80
+ });
81
+ if (existing)
82
+ return;
83
+ await this.userRoleRepo.save({ userId, roleId: superAdminRole.id });
84
+ this.logger.log(`Assigned role "${ROOT_ROLE}" to root account: ${email}`);
78
85
  }
79
86
  };
80
87
  exports.RootAccountService = RootAccountService;
@@ -1 +1 @@
1
- {"version":3,"file":"root-account.service.js","sourceRoot":"","sources":["../../../../../src/server/auth/infrastructure/services/root-account.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root-account.service.js","sourceRoot":"","sources":["../../../../../src/server/auth/infrastructure/services/root-account.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udhuong/admin-core",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Reusable admin core (client + server) — auth, RBAC, OAuth, user management. Built với NestJS + Next.js, ship trong 1 package với subpath exports.",
5
5
  "license": "MIT",
6
6
  "author": "udhuong <l19htm4n@gmail.com>",