mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix: align user group access controls
This commit is contained in:
@@ -1552,6 +1552,10 @@ function formatUserEffectiveRateLimitSource(user: User): string {
|
||||
if (source.source === 'group' && source.group_name) {
|
||||
return `继承自分组:${source.group_name}`
|
||||
}
|
||||
if (source.source === 'combined') {
|
||||
const groupNames = Array.isArray(source.group_names) ? source.group_names.join('、') : ''
|
||||
return groupNames ? `用户额外限制与分组叠加:${groupNames}` : '用户额外限制与分组叠加'
|
||||
}
|
||||
if (source.source === 'user') {
|
||||
return '用户单独配置'
|
||||
}
|
||||
@@ -1596,14 +1600,6 @@ function editUser(user: User) {
|
||||
unlimited: user.unlimited,
|
||||
role: user.role,
|
||||
is_active: user.is_active,
|
||||
allowed_providers: user.allowed_providers == null ? null : [...user.allowed_providers],
|
||||
allowed_api_formats: user.allowed_api_formats == null ? null : [...user.allowed_api_formats],
|
||||
allowed_models: user.allowed_models == null ? null : [...user.allowed_models],
|
||||
rate_limit: user.rate_limit ?? null,
|
||||
allowed_providers_mode: user.allowed_providers_mode ?? (user.allowed_providers == null ? 'unrestricted' : 'specific'),
|
||||
allowed_api_formats_mode: user.allowed_api_formats_mode ?? (user.allowed_api_formats == null ? 'unrestricted' : 'specific'),
|
||||
allowed_models_mode: user.allowed_models_mode ?? (user.allowed_models == null ? 'unrestricted' : 'specific'),
|
||||
rate_limit_mode: user.rate_limit_mode ?? (user.rate_limit == null ? 'system' : 'custom'),
|
||||
group_ids: (user.groups || []).map(group => group.id),
|
||||
}
|
||||
showUserFormDialog.value = true
|
||||
@@ -1624,14 +1620,6 @@ async function handleUserFormSubmit(data: UserFormData & { password?: string; un
|
||||
email: data.email || undefined,
|
||||
unlimited: data.unlimited,
|
||||
role: data.role,
|
||||
allowed_providers: data.allowed_providers,
|
||||
allowed_providers_mode: data.allowed_providers_mode,
|
||||
allowed_api_formats: data.allowed_api_formats,
|
||||
allowed_api_formats_mode: data.allowed_api_formats_mode,
|
||||
allowed_models: data.allowed_models,
|
||||
allowed_models_mode: data.allowed_models_mode,
|
||||
rate_limit: data.rate_limit ?? null,
|
||||
rate_limit_mode: data.rate_limit_mode,
|
||||
group_ids: data.group_ids ?? [],
|
||||
}
|
||||
if (data.password) {
|
||||
@@ -1649,14 +1637,6 @@ async function handleUserFormSubmit(data: UserFormData & { password?: string; un
|
||||
initial_gift_usd: data.initial_gift_usd,
|
||||
unlimited: data.unlimited,
|
||||
role: data.role,
|
||||
allowed_providers: data.allowed_providers,
|
||||
allowed_providers_mode: data.allowed_providers_mode,
|
||||
allowed_api_formats: data.allowed_api_formats,
|
||||
allowed_api_formats_mode: data.allowed_api_formats_mode,
|
||||
allowed_models: data.allowed_models,
|
||||
allowed_models_mode: data.allowed_models_mode,
|
||||
rate_limit: data.rate_limit ?? null,
|
||||
rate_limit_mode: data.rate_limit_mode,
|
||||
group_ids: data.group_ids ?? [],
|
||||
})
|
||||
// 如果创建时指定为禁用,则更新状态
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
数据预览
|
||||
</p>
|
||||
<ul class="space-y-1 text-muted-foreground">
|
||||
<li v-if="importUsersPreview.user_groups?.length">
|
||||
用户组: {{ importUsersPreview.user_groups.length }} 个
|
||||
</li>
|
||||
<li>用户: {{ importUsersPreview.users?.length || 0 }} 个</li>
|
||||
<li>
|
||||
API Keys: {{ importUsersPreview.users?.reduce((sum: number, u: { api_keys?: unknown[] }) => sum + (u.api_keys?.length || 0), 0) }} 个
|
||||
@@ -93,6 +96,16 @@
|
||||
class="space-y-4"
|
||||
>
|
||||
<div class="grid grid-cols-2 gap-4 text-sm">
|
||||
<div v-if="importUsersResult.stats.user_groups">
|
||||
<p class="font-medium">
|
||||
用户组
|
||||
</p>
|
||||
<p class="text-muted-foreground">
|
||||
创建: {{ importUsersResult.stats.user_groups.created }},
|
||||
更新: {{ importUsersResult.stats.user_groups.updated }},
|
||||
跳过: {{ importUsersResult.stats.user_groups.skipped }}
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="font-medium">
|
||||
用户
|
||||
|
||||
@@ -36,7 +36,9 @@ function looksLikeConfigExport(value: JsonObject): boolean {
|
||||
}
|
||||
|
||||
function looksLikeUsersExport(value: JsonObject): boolean {
|
||||
return hasArrayField(value, 'users') || hasArrayField(value, 'standalone_keys')
|
||||
return hasArrayField(value, 'users')
|
||||
|| hasArrayField(value, 'standalone_keys')
|
||||
|| hasArrayField(value, 'user_groups')
|
||||
}
|
||||
|
||||
export function useConfigExportImport(systemConfig: { value: SystemConfig }) {
|
||||
@@ -231,6 +233,11 @@ export function useConfigExportImport(systemConfig: { value: SystemConfig }) {
|
||||
return
|
||||
}
|
||||
|
||||
if (root.user_groups != null && !Array.isArray(root.user_groups)) {
|
||||
error('无效的用户数据文件:user_groups 必须是数组')
|
||||
return
|
||||
}
|
||||
|
||||
if (root.standalone_keys != null && !Array.isArray(root.standalone_keys)) {
|
||||
error('无效的用户数据文件:standalone_keys 必须是数组')
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user