feat: LDAP 用户隐藏密码修改功能并应用默认配额

- /me API 返回 auth_source 字段
- 前端 Settings 页面对 LDAP 用户隐藏密码修改卡片
- LDAP 用户首次登录创建时使用系统默认配额

Close #98
This commit is contained in:
fawney19
2026-01-15 17:57:58 +08:00
parent d9645fa062
commit dd387735d4
4 changed files with 13 additions and 3 deletions

View File

@@ -11,8 +11,9 @@ export interface Profile {
used_usd: number used_usd: number
total_usd?: number // 累积消费总额 total_usd?: number // 累积消费总额
created_at: string created_at: string
updated_at: string updated_at?: string
last_login_at?: string last_login_at?: string
auth_source?: 'local' | 'ldap'
preferences?: UserPreferences preferences?: UserPreferences
} }

View File

@@ -69,8 +69,11 @@
</form> </form>
</Card> </Card>
<!-- 修改密码 --> <!-- 修改密码 (LDAP 用户不显示) -->
<Card class="p-6"> <Card
v-if="profile?.auth_source !== 'ldap'"
class="p-6"
>
<h3 class="text-lg font-medium text-foreground mb-4"> <h3 class="text-lg font-medium text-foreground mb-4">
修改密码 修改密码
</h3> </h3>

View File

@@ -536,6 +536,7 @@ class AuthCurrentUserAdapter(AuthenticatedApiAdapter):
"allowed_models": user.allowed_models, "allowed_models": user.allowed_models,
"created_at": user.created_at.isoformat(), "created_at": user.created_at.isoformat(),
"last_login_at": user.last_login_at.isoformat() if user.last_login_at else None, "last_login_at": user.last_login_at.isoformat() if user.last_login_at else None,
"auth_source": user.auth_source.value,
} }

View File

@@ -22,6 +22,7 @@ from sqlalchemy.orm import Session, joinedload
from src.config import config from src.config import config
from src.core.logger import logger from src.core.logger import logger
from src.core.enums import AuthSource from src.core.enums import AuthSource
from src.services.system.config import SystemConfigService
if TYPE_CHECKING: if TYPE_CHECKING:
from src.models.database import ManagementToken from src.models.database import ManagementToken
@@ -317,6 +318,9 @@ class AuthService:
username = f"{base_username}_ldap_{int(time.time())}{uuid.uuid4().hex[:4]}" username = f"{base_username}_ldap_{int(time.time())}{uuid.uuid4().hex[:4]}"
logger.info(f"LDAP 用户名冲突,使用新用户名: {ldap_user['username']} -> {username}") logger.info(f"LDAP 用户名冲突,使用新用户名: {ldap_user['username']} -> {username}")
# 读取系统配置的默认配额
default_quota = SystemConfigService.get_config(db, "default_user_quota_usd", default=10.0)
# 创建新用户 # 创建新用户
user = User( user = User(
email=email, email=email,
@@ -328,6 +332,7 @@ class AuthService:
role=UserRole.USER, role=UserRole.USER,
is_active=True, is_active=True,
last_login_at=datetime.now(timezone.utc), last_login_at=datetime.now(timezone.utc),
quota_usd=default_quota,
) )
try: try: