Files

86 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""
初始化角色系统默认数据
运行方式:
cd backend
python scripts/init_roles.py
"""
import sys
import os
# 添加 backend 目录到 Python 路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session
from app.config import settings
from app.models import Role
def init_roles():
"""初始化三个默认角色:user / agent / admin"""
# 使用配置中的数据库 URL
# 注意:本地开发使用 aiosqlite 异步驱动,但脚本是同步的
# 需要将 sqlite+aiosqlite:// 替换为 sqlite://
db_url = settings.database_url.replace("sqlite+aiosqlite://", "sqlite://")
engine = create_engine(db_url)
with Session(engine) as session:
# 检查是否已有角色数据
existing = session.execute(select(Role)).scalars().all()
if existing:
print(f"角色表已有 {len(existing)} 条数据,跳过初始化")
for role in existing:
print(f" - {role.name}: {role.display_name} (is_default={role.is_default})")
return
# 创建默认角色
roles = [
Role(
name="user",
display_name="用户",
description="所有在职员工默认角色,可提交工单、查看知识库、与 AI 对话",
permissions=["submit_ticket", "view_knowledge", "chat_with_ai", "view_own_tickets"],
is_default=True,
),
Role(
name="agent",
display_name="坐席",
description="IT 坐席人员,可处理工单、查看所有会话、使用坐席工具",
permissions=[
"submit_ticket", "view_knowledge", "chat_with_ai", "view_own_tickets",
"handle_tickets", "view_all_conversations", "use_agent_tools",
"transfer_conversations", "manage_quick_replies",
],
is_default=False,
),
Role(
name="admin",
display_name="管理员",
description="系统管理员,可管理所有配置、用户、角色和数据",
permissions=[
"submit_ticket", "view_knowledge", "chat_with_ai", "view_own_tickets",
"handle_tickets", "view_all_conversations", "use_agent_tools",
"transfer_conversations", "manage_quick_replies",
"manage_users", "manage_roles", "manage_system_config",
"view_analytics", "manage_knowledge_base",
],
is_default=False,
),
]
session.add_all(roles)
session.commit()
print("[OK] 角色初始化完成:")
for role in roles:
print(f" - {role.name}: {role.display_name}")
if __name__ == "__main__":
init_roles()