feat: Update user controller
This commit is contained in:
@@ -147,64 +147,6 @@ def get_tenant_superusers(
|
|||||||
return success(data=superusers_schema, msg=t("users.list.superusers_success"))
|
return success(data=superusers_schema, msg=t("users.list.superusers_success"))
|
||||||
|
|
||||||
|
|
||||||
@router.get("/tenant/users", response_model=ApiResponse)
|
|
||||||
def get_tenant_users(
|
|
||||||
page: int = 1,
|
|
||||||
size: int = 20,
|
|
||||||
is_active: bool = None,
|
|
||||||
is_superuser: bool = None,
|
|
||||||
search: str = None,
|
|
||||||
db: Session = Depends(get_db),
|
|
||||||
current_user: User = Depends(get_current_user),
|
|
||||||
t: Callable = Depends(get_translator)
|
|
||||||
):
|
|
||||||
"""获取当前用户所在租户的用户列表(普通用户可访问)"""
|
|
||||||
api_logger.info(f"获取租户用户列表请求: tenant_id={current_user.tenant_id}, 操作者: {current_user.username}")
|
|
||||||
|
|
||||||
if not current_user.tenant_id:
|
|
||||||
raise BusinessException("用户没有租户信息", code=BizCode.TENANT_NOT_FOUND)
|
|
||||||
|
|
||||||
from app.services.tenant_service import TenantService
|
|
||||||
tenant_service = TenantService(db)
|
|
||||||
|
|
||||||
skip = (page - 1) * size
|
|
||||||
users = tenant_service.get_tenant_users(
|
|
||||||
tenant_id=current_user.tenant_id,
|
|
||||||
skip=skip,
|
|
||||||
limit=size,
|
|
||||||
is_active=is_active,
|
|
||||||
is_superuser=is_superuser,
|
|
||||||
search=search
|
|
||||||
)
|
|
||||||
total = tenant_service.count_tenant_users(
|
|
||||||
tenant_id=current_user.tenant_id,
|
|
||||||
is_active=is_active,
|
|
||||||
is_superuser=is_superuser,
|
|
||||||
search=search
|
|
||||||
)
|
|
||||||
|
|
||||||
users_schema = [user_schema.User.model_validate(u) for u in users]
|
|
||||||
for u_schema in users_schema:
|
|
||||||
user = users[[s.id for s in users_schema].index(u_schema.id)]
|
|
||||||
if user.external_source:
|
|
||||||
from premium.sso.models import SSOSource
|
|
||||||
source = db.query(SSOSource).filter(SSOSource.source_code == user.external_source).first()
|
|
||||||
u_schema.permissions = source.permissions if source and source.permissions else []
|
|
||||||
else:
|
|
||||||
u_schema.permissions = ["all"]
|
|
||||||
|
|
||||||
return success(
|
|
||||||
data={
|
|
||||||
"users": users_schema,
|
|
||||||
"total": total,
|
|
||||||
"page": page,
|
|
||||||
"size": size,
|
|
||||||
},
|
|
||||||
msg=t("users.list.get_success")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{user_id}", response_model=ApiResponse)
|
@router.get("/{user_id}", response_model=ApiResponse)
|
||||||
def get_user_info_by_id(
|
def get_user_info_by_id(
|
||||||
user_id: uuid.UUID,
|
user_id: uuid.UUID,
|
||||||
|
|||||||
@@ -100,15 +100,6 @@ class TenantRepository:
|
|||||||
db_tenant.is_active = False
|
db_tenant.is_active = False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_tenant_users(self, tenant_id: uuid.UUID, is_active: Optional[bool] = None) -> List[User]:
|
|
||||||
"""获取租户下的所有用户"""
|
|
||||||
query = self.db.query(User).filter(User.tenant_id == tenant_id)
|
|
||||||
|
|
||||||
if is_active is not None:
|
|
||||||
query = query.filter(User.is_active == is_active)
|
|
||||||
|
|
||||||
return query.all()
|
|
||||||
|
|
||||||
def get_user_tenant(self, user_id: uuid.UUID) -> Optional[Tenants]:
|
def get_user_tenant(self, user_id: uuid.UUID) -> Optional[Tenants]:
|
||||||
"""获取用户所属的租户"""
|
"""获取用户所属的租户"""
|
||||||
user = self.db.query(User).filter(User.id == user_id).first()
|
user = self.db.query(User).filter(User.id == user_id).first()
|
||||||
@@ -130,15 +121,6 @@ class TenantRepository:
|
|||||||
|
|
||||||
user.tenant_id = tenant_id
|
user.tenant_id = tenant_id
|
||||||
self.db.flush()
|
self.db.flush()
|
||||||
return True
|
|
||||||
|
|
||||||
def count_tenant_users(self, tenant_id: uuid.UUID, is_active: Optional[bool] = None) -> int:
|
|
||||||
"""统计租户下的用户数量"""
|
|
||||||
query = self.db.query(func.count(User.id)).filter(User.tenant_id == tenant_id)
|
|
||||||
|
|
||||||
if is_active is not None:
|
|
||||||
query = query.filter(User.is_active == is_active)
|
|
||||||
|
|
||||||
return query.scalar()
|
return query.scalar()
|
||||||
|
|
||||||
|
|
||||||
@@ -162,7 +144,3 @@ def get_tenants(db: Session, skip: int = 0, limit: int = 100) -> List[Tenants]:
|
|||||||
def get_user_tenant(db: Session, user_id: uuid.UUID) -> Optional[Tenants]:
|
def get_user_tenant(db: Session, user_id: uuid.UUID) -> Optional[Tenants]:
|
||||||
"""获取用户所属的租户"""
|
"""获取用户所属的租户"""
|
||||||
return TenantRepository(db).get_user_tenant(user_id)
|
return TenantRepository(db).get_user_tenant(user_id)
|
||||||
|
|
||||||
def get_tenant_users(db: Session, tenant_id: uuid.UUID) -> List[User]:
|
|
||||||
"""获取租户下的所有用户"""
|
|
||||||
return TenantRepository(db).get_tenant_users(tenant_id)
|
|
||||||
@@ -138,42 +138,7 @@ class TenantService:
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
business_logger.error(f"删除租户失败: {str(e)}")
|
business_logger.error(f"删除租户失败: {str(e)}")
|
||||||
raise BusinessException(f"删除租户失败: {str(e)}", code=BizCode.DB_ERROR)
|
raise BusinessException(f"删除租户失败:{str(e)}", code=BizCode.DB_ERROR)
|
||||||
|
|
||||||
# 租户用户管理
|
|
||||||
def get_tenant_users(
|
|
||||||
self,
|
|
||||||
tenant_id: uuid.UUID,
|
|
||||||
skip: int = 0,
|
|
||||||
limit: int = 100,
|
|
||||||
is_active: Optional[bool] = None,
|
|
||||||
is_superuser: Optional[bool] = None,
|
|
||||||
search: Optional[str] = None
|
|
||||||
) -> List[UserModel]:
|
|
||||||
"""获取租户下的用户列表"""
|
|
||||||
return self.user_repo.get_users_by_tenant(
|
|
||||||
tenant_id=tenant_id,
|
|
||||||
skip=skip,
|
|
||||||
limit=limit,
|
|
||||||
is_active=is_active,
|
|
||||||
is_superuser=is_superuser,
|
|
||||||
search=search
|
|
||||||
)
|
|
||||||
|
|
||||||
def count_tenant_users(
|
|
||||||
self,
|
|
||||||
tenant_id: uuid.UUID,
|
|
||||||
is_active: Optional[bool] = None,
|
|
||||||
is_superuser: Optional[bool] = None,
|
|
||||||
search: Optional[str] = None
|
|
||||||
) -> int:
|
|
||||||
"""统计租户下的用户数量"""
|
|
||||||
return self.user_repo.count_users_by_tenant(
|
|
||||||
tenant_id=tenant_id,
|
|
||||||
is_active=is_active,
|
|
||||||
is_superuser=is_superuser,
|
|
||||||
search=search
|
|
||||||
)
|
|
||||||
|
|
||||||
def assign_user_to_tenant(self, user_id: uuid.UUID, tenant_id: uuid.UUID) -> bool:
|
def assign_user_to_tenant(self, user_id: uuid.UUID, tenant_id: uuid.UUID) -> bool:
|
||||||
"""将用户分配给租户"""
|
"""将用户分配给租户"""
|
||||||
|
|||||||
Reference in New Issue
Block a user