mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-09 17:57:06 +08:00
feat: User Management
This commit is contained in:
@@ -1,9 +1,27 @@
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
from common.core.deps import CurrentUser
|
||||
from apps.system.models.user import user_grid
|
||||
from common.core.deps import CurrentUser, SessionDep
|
||||
from common.core.pagination import Paginator
|
||||
from common.core.schemas import PaginatedResponse, PaginationParams
|
||||
|
||||
router = APIRouter(tags=["user"], prefix="/user")
|
||||
|
||||
|
||||
@router.get("/info")
|
||||
async def user_info(current_user: CurrentUser):
|
||||
return current_user.to_dict()
|
||||
return current_user.to_dict()
|
||||
|
||||
|
||||
@router.get("/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[user_grid])
|
||||
async def pager(
|
||||
session: SessionDep,
|
||||
pageNum: int,
|
||||
pageSize: int
|
||||
):
|
||||
pagination = PaginationParams(page=pageNum, size=pageSize)
|
||||
paginator = Paginator(session)
|
||||
filters = {}
|
||||
return await paginator.get_paginated_response(
|
||||
model=user_grid,
|
||||
pagination=pagination,
|
||||
**filters)
|
||||
@@ -1,12 +1,14 @@
|
||||
|
||||
from sqlmodel import Session, select
|
||||
from ..models.user import sys_user
|
||||
from ..models.user import sys_user, user_grid
|
||||
from common.core.security import verify_md5pwd
|
||||
|
||||
def get_user_by_account(*, session: Session, account: str) -> sys_user | None:
|
||||
statement = select(sys_user).where(sys_user.account == account)
|
||||
#statement = select(sys_user).where(sys_user.account == account)
|
||||
statement = select(user_grid.id, user_grid.account, user_grid.oid, user_grid.password).where(user_grid.account == account)
|
||||
session_user = session.exec(statement).first()
|
||||
return session_user
|
||||
result_user = sys_user.model_validate(session_user)
|
||||
return result_user
|
||||
|
||||
def authenticate(*, session: Session, account: str, password: str) -> sys_user | None:
|
||||
db_user = get_user_by_account(session=session, account=account)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
|
||||
from typing import Optional
|
||||
from sqlmodel import SQLModel, Field
|
||||
|
||||
class sys_user(SQLModel, table=True):
|
||||
class sys_user(SQLModel):
|
||||
id: int = Field(primary_key=True, index=True)
|
||||
account: str = Field(max_length=255, unique=True)
|
||||
password: str = Field(max_length=255)
|
||||
@@ -12,4 +13,12 @@ class sys_user(SQLModel, table=True):
|
||||
"id": self.id,
|
||||
"account": self.account,
|
||||
"oid": self.oid
|
||||
}
|
||||
}
|
||||
|
||||
class user_grid(sys_user, table=True):
|
||||
__tablename__ = "sys_user"
|
||||
name: str
|
||||
email: str
|
||||
status: int
|
||||
create_time: int
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ from fastapi import Depends, HTTPException, status
|
||||
# from fastapi.security import OAuth2PasswordBearer
|
||||
from jwt.exceptions import InvalidTokenError
|
||||
from pydantic import BaseModel, ValidationError
|
||||
from sqlmodel import Session
|
||||
from sqlmodel import Session, select
|
||||
from common.core.schemas import TokenPayload, XOAuth2PasswordBearer
|
||||
from common.core import security
|
||||
from common.core.config import settings
|
||||
from common.core.db import get_session
|
||||
from apps.system.models.user import sys_user
|
||||
from apps.system.models.user import sys_user, user_grid
|
||||
reusable_oauth2 = XOAuth2PasswordBearer(
|
||||
tokenUrl=f"{settings.API_V1_STR}/login/access-token"
|
||||
)
|
||||
@@ -32,7 +32,11 @@ async def get_current_user(session: SessionDep, token: TokenDep) -> sys_user:
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="Could not validate credentials",
|
||||
)
|
||||
user = session.get(sys_user, token_data.id)
|
||||
statement = select(user_grid.id, user_grid.account, user_grid.oid, user_grid.password).where(user_grid.id == token_data.id)
|
||||
session_user = session.exec(statement).first()
|
||||
if not session_user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
user = sys_user.model_validate(session_user)
|
||||
if not user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
""" if not user.is_active:
|
||||
|
||||
Reference in New Issue
Block a user