befly 3.9.31 → 3.9.32

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.
package/docs/table.md CHANGED
@@ -126,17 +126,17 @@ interface FieldDefinition {
126
126
 
127
127
  ### 可选属性
128
128
 
129
- | 属性 | 类型 | 默认值 | 说明 |
130
- | ---------- | ---------------- | ------- | ------------------------------------ |
131
- | `detail` | `string` | `''` | 字段详细说明 |
132
- | `min` | `number \| null` | `0` | 最小值(number)或最小长度(string) |
133
- | `max` | `number \| null` | `100` | 最大值(number)或最大长度(string |
134
- | `default` | `any` | `null` | 默认值 |
135
- | `index` | `boolean` | `false` | 是否创建普通索引 |
136
- | `unique` | `boolean` | `false` | 是否唯一约束 |
137
- | `nullable` | `boolean` | `false` | 是否允许 NULL |
138
- | `unsigned` | `boolean` | `true` | 是否无符号(仅 number 类型有效) |
139
- | `regexp` | `string \| null` | `null` | 正则验证规则(内置或自定义) |
129
+ | 属性 | 类型 | 默认值 | 说明 |
130
+ | ---------- | ---------------- | ---------------------------------------------- | ----------------------------------------------------------------------- |
131
+ | `detail` | `string` | `''` | 字段详细说明 |
132
+ | `min` | `number \| null` | `0` | 最小值(number)或最小长度(string) |
133
+ | `max` | `number \| null` | `100` (string) <br> `999999999999999` (number) | 最大值(number)或最大长度(string),number 类型默认为 999999999999999 |
134
+ | `default` | `any` | `null` | 默认值 |
135
+ | `index` | `boolean` | `false` | 是否创建普通索引 |
136
+ | `unique` | `boolean` | `false` | 是否唯一约束 |
137
+ | `nullable` | `boolean` | `false` | 是否允许 NULL |
138
+ | `unsigned` | `boolean` | `true` | 是否无符号(仅 number 类型有效) |
139
+ | `regexp` | `string \| null` | `null` | 正则验证规则(内置或自定义) |
140
140
 
141
141
  ---
142
142
 
@@ -188,7 +188,6 @@ interface FieldDefinition {
188
188
  "name": "角色ID",
189
189
  "type": "number",
190
190
  "min": 1,
191
- "max": 999999999999999,
192
191
  "index": true
193
192
  }
194
193
  }
@@ -197,6 +196,7 @@ interface FieldDefinition {
197
196
  **约束规则:**
198
197
 
199
198
  - `min` 和 `max` 用于输入验证
199
+ - `max` 默认为 `999999999999999`(如未指定或为 null)
200
200
  - `unsigned` 默认为 `true`(无符号,仅 MySQL 有效)
201
201
  - 默认值为 `0`
202
202
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "befly",
3
- "version": "3.9.31",
3
+ "version": "3.9.32",
4
4
  "description": "Befly - 为 Bun 专属打造的 TypeScript API 接口框架核心引擎",
5
5
  "type": "module",
6
6
  "private": false,
@@ -74,7 +74,7 @@
74
74
  "pino": "^10.1.0",
75
75
  "pino-roll": "^4.0.0"
76
76
  },
77
- "gitHead": "8725d04017ae530017c1d400d0fc7b4e2b3ffdb0",
77
+ "gitHead": "7287680c89b51f165086410727cd4e769e87cd46",
78
78
  "devDependencies": {
79
79
  "typescript": "^5.9.3"
80
80
  }
@@ -77,7 +77,7 @@ export function formatFieldList(fields: string[]): string {
77
77
  export function applyFieldDefaults(fieldDef: any): void {
78
78
  fieldDef.detail = fieldDef.detail ?? '';
79
79
  fieldDef.min = fieldDef.min ?? 0;
80
- fieldDef.max = fieldDef.max ?? 100;
80
+ fieldDef.max = fieldDef.max ?? (fieldDef.type === 'number' ? 999999999999999 : 100);
81
81
  fieldDef.default = fieldDef.default ?? null;
82
82
  fieldDef.index = fieldDef.index ?? false;
83
83
  fieldDef.unique = fieldDef.unique ?? false;
package/sync/syncDev.ts CHANGED
@@ -3,7 +3,9 @@
3
3
  * - 邮箱: 通过 DEV_EMAIL 环境变量配置(默认 dev@qq.com)
4
4
  * - 姓名: 开发者
5
5
  * - 密码: 使用 bcrypt 加密,通过 DEV_PASSWORD 环境变量配置
6
- * - 角色: roleCode=dev, roleType=admin
6
+ * - 角色: 同步 dev, user, admin, guest 四个角色
7
+ * - dev: 拥有所有菜单和接口权限
8
+ * - user, admin, guest: 菜单和接口权限为空
7
9
  * - 表名: addon_admin_admin
8
10
  */
9
11
 
@@ -85,38 +87,86 @@ export async function syncDevCommand(options: SyncDevOptions = {}): Promise<void
85
87
  }
86
88
  }
87
89
 
88
- // 查询或创建 dev 角色
89
- let devRole = await helper.getOne({
90
- table: 'addon_admin_role',
91
- where: { code: 'dev' }
92
- });
90
+ // 定义四个角色的配置
91
+ const roles = [
92
+ {
93
+ code: 'dev',
94
+ name: '开发者角色',
95
+ description: '拥有所有菜单和接口权限的开发者角色',
96
+ menus: menuIds,
97
+ apis: apiIds,
98
+ sort: 0
99
+ },
100
+ {
101
+ code: 'user',
102
+ name: '用户角色',
103
+ description: '普通用户角色',
104
+ menus: '',
105
+ apis: '',
106
+ sort: 1
107
+ },
108
+ {
109
+ code: 'admin',
110
+ name: '管理员角色',
111
+ description: '管理员角色',
112
+ menus: '',
113
+ apis: '',
114
+ sort: 2
115
+ },
116
+ {
117
+ code: 'guest',
118
+ name: '访客角色',
119
+ description: '访客角色',
120
+ menus: '',
121
+ apis: '',
122
+ sort: 3
123
+ }
124
+ ];
93
125
 
94
- if (devRole) {
95
- // 更新 dev 角色的菜单和接口权限
96
- await helper.updData({
126
+ // 同步所有角色
127
+ let devRole = null;
128
+ for (const roleConfig of roles) {
129
+ const existingRole = await helper.getOne({
97
130
  table: 'addon_admin_role',
98
- where: { code: 'dev' },
99
- data: {
100
- name: '开发者角色',
101
- description: '拥有所有菜单和接口权限的开发者角色',
102
- menus: menuIds,
103
- apis: apiIds
104
- }
131
+ where: { code: roleConfig.code }
105
132
  });
106
- } else {
107
- // 创建 dev 角色
108
- const roleId = await helper.insData({
109
- table: 'addon_admin_role',
110
- data: {
111
- name: '开发者角色',
112
- code: 'dev',
113
- description: '拥有所有菜单和接口权限的开发者角色',
114
- menus: menuIds,
115
- apis: apiIds,
116
- sort: 0
133
+
134
+ if (existingRole) {
135
+ // 检查字段是否有变化
136
+ const hasChanges = existingRole.name !== roleConfig.name || existingRole.description !== roleConfig.description || existingRole.menus !== roleConfig.menus || existingRole.apis !== roleConfig.apis || existingRole.sort !== roleConfig.sort;
137
+
138
+ if (hasChanges) {
139
+ // 更新现有角色
140
+ await helper.updData({
141
+ table: 'addon_admin_role',
142
+ where: { code: roleConfig.code },
143
+ data: {
144
+ name: roleConfig.name,
145
+ description: roleConfig.description,
146
+ menus: roleConfig.menus,
147
+ apis: roleConfig.apis,
148
+ sort: roleConfig.sort
149
+ }
150
+ });
117
151
  }
118
- });
119
- devRole = { id: roleId };
152
+ if (roleConfig.code === 'dev') {
153
+ devRole = existingRole;
154
+ }
155
+ } else {
156
+ // 创建新角色
157
+ const roleId = await helper.insData({
158
+ table: 'addon_admin_role',
159
+ data: roleConfig
160
+ });
161
+ if (roleConfig.code === 'dev') {
162
+ devRole = { id: roleId };
163
+ }
164
+ }
165
+ }
166
+
167
+ if (!devRole) {
168
+ Logger.error('dev 角色不存在,无法创建开发者账号');
169
+ return;
120
170
  }
121
171
 
122
172
  // 先对密码进行 SHA-256 + 盐值 哈希(模拟前端加密),再用 bcrypt 存储