29 lines
971 B
Python
29 lines
971 B
Python
|
|
from app import app
|
||
|
|
from extensions import db
|
||
|
|
from sqlalchemy import text
|
||
|
|
|
||
|
|
def migrate():
|
||
|
|
with app.app_context():
|
||
|
|
print("🔧 正在平滑迁移至 RBAC 体系...")
|
||
|
|
try:
|
||
|
|
# 1. 创建新表
|
||
|
|
db.create_all()
|
||
|
|
|
||
|
|
# 2. 修改 users 表结构
|
||
|
|
# 增加 role_id
|
||
|
|
db.session.execute(text('ALTER TABLE users ADD COLUMN IF NOT EXISTS role_id INTEGER REFERENCES roles(id)'))
|
||
|
|
|
||
|
|
# 3. 尝试迁移旧数据:如果旧的 role 字段存在且值为 'admin',则关联超级管理员角色
|
||
|
|
# 我们先执行初始化脚本创建角色
|
||
|
|
from init_rbac import init_rbac
|
||
|
|
init_rbac()
|
||
|
|
|
||
|
|
db.session.commit()
|
||
|
|
print("✅ 数据库结构迁移成功")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"❌ 迁移失败: {e}")
|
||
|
|
db.session.rollback()
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
migrate()
|