86 lines
3.0 KiB
Python
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()
|