121 lines
3.0 KiB
Python
121 lines
3.0 KiB
Python
"""Initialize system management data."""
|
|
|
|
from sqlalchemy.orm import Session
|
|
from ..models.permission import Role
|
|
from ..models.user import User
|
|
from ..services.auth import AuthService
|
|
from ..utils.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def init_roles(db: Session) -> None:
|
|
"""初始化系统角色."""
|
|
roles_data = [
|
|
{
|
|
"name": "超级管理员",
|
|
"code": "SUPER_ADMIN",
|
|
"description": "系统超级管理员,拥有所有权限"
|
|
},
|
|
{
|
|
"name": "普通用户",
|
|
"code": "USER",
|
|
"description": "普通用户,基础功能权限"
|
|
}
|
|
]
|
|
|
|
for role_data in roles_data:
|
|
# 检查角色是否已存在
|
|
existing_role = db.query(Role).filter(
|
|
Role.code == role_data["code"]
|
|
).first()
|
|
|
|
if not existing_role:
|
|
# 创建角色
|
|
role = Role(
|
|
name=role_data["name"],
|
|
code=role_data["code"],
|
|
description=role_data["description"]
|
|
)
|
|
role.set_audit_fields(1) # 系统用户ID为1
|
|
db.add(role)
|
|
logger.info(f"Created role: {role_data['name']} ({role_data['code']})")
|
|
|
|
db.commit()
|
|
logger.info("Roles initialization completed")
|
|
|
|
|
|
|
|
|
|
|
|
def init_admin_user(db: Session) -> None:
|
|
"""初始化默认管理员用户."""
|
|
logger.info("Starting admin user initialization...")
|
|
|
|
# 检查是否已存在管理员用户
|
|
existing_admin = db.query(User).filter(
|
|
User.username == "admin"
|
|
).first()
|
|
|
|
if existing_admin:
|
|
logger.info("Admin user already exists")
|
|
return
|
|
|
|
# 创建管理员用户
|
|
hashed_password = AuthService.get_password_hash("admin123")
|
|
|
|
admin_user = User(
|
|
username="admin",
|
|
email="admin@example.com",
|
|
hashed_password=hashed_password,
|
|
full_name="系统管理员",
|
|
is_active=True
|
|
)
|
|
|
|
admin_user.set_audit_fields(1)
|
|
db.add(admin_user)
|
|
db.flush()
|
|
|
|
# 分配超级管理员角色
|
|
super_admin_role = db.query(Role).filter(
|
|
Role.code == "SUPER_ADMIN"
|
|
).first()
|
|
|
|
if super_admin_role:
|
|
admin_user.roles.append(super_admin_role)
|
|
|
|
db.commit()
|
|
logger.info("Admin user created: admin / admin123")
|
|
|
|
|
|
def init_system_data(db: Session) -> None:
|
|
"""初始化所有系统数据."""
|
|
logger.info("Starting system data initialization...")
|
|
|
|
try:
|
|
# 初始化角色
|
|
init_roles(db)
|
|
|
|
# 初始化管理员用户
|
|
init_admin_user(db)
|
|
|
|
logger.info("System data initialization completed successfully")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error during system data initialization: {str(e)}")
|
|
db.rollback()
|
|
raise
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# 可以单独运行此脚本来初始化数据
|
|
from ..db.database import SessionLocal
|
|
|
|
db = SessionLocal()
|
|
try:
|
|
init_system_data(db)
|
|
finally:
|
|
db.close() |