Commit 1837325e by yiling.shen

调整陈心语用户权限:从通善口腔医院到河埒诊所

parent ab05d149
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
检查陈心语用户配置
"""
from clinic_config import DEFAULT_USERS, get_user_by_username
def main():
print("🔍 检查陈心语用户配置")
print("=" * 50)
# 查找陈心语用户
chenxinyu = get_user_by_username('chenxinyu')
if chenxinyu:
print("✅ 找到陈心语用户配置:")
print(f" 用户名: {chenxinyu['username']}")
print(f" 真实姓名: {chenxinyu['real_name']}")
print(f" 角色: {chenxinyu['role']}")
print(f" 诊所ID: {chenxinyu['clinic_id']}")
print(f" 诊所名称: {chenxinyu['clinic_name']}")
print(f" 密码: {chenxinyu['password']}")
# 检查权限
if chenxinyu['clinic_id'] == 'clinic_helai':
print("\n✅ 权限已正确调整到河埒诊所")
else:
print(f"\n❌ 权限还是 {chenxinyu['clinic_id']},需要调整")
else:
print("❌ 未找到陈心语用户配置")
# 显示所有用户
print(f"\n👥 所有用户列表 ({len(DEFAULT_USERS)} 个):")
for user in DEFAULT_USERS:
clinic_name = user.get('clinic_name', '总部')
print(f" {user['username']} ({user['real_name']}) - {user['role']} - {clinic_name}")
if __name__ == "__main__":
main()
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
查看数据库表结构
"""
import sqlite3
import os
def check_database_structure():
"""检查数据库表结构"""
db_path = "callback_records.db"
if not os.path.exists(db_path):
print(f"数据库文件 {db_path} 不存在")
return
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 获取表结构
cursor.execute("PRAGMA table_info(callback_records)")
columns = cursor.fetchall()
print("=== 数据库表结构 ===")
print(f"表名: callback_records")
print(f"字段数量: {len(columns)}")
print("\n字段详情:")
print("-" * 60)
print(f"{'序号':<4} {'字段名':<20} {'类型':<15} {'是否为空':<8} {'默认值':<10}")
print("-" * 60)
for row in columns:
cid, name, type_name, not_null, default_value, pk = row
print(f"{cid:<4} {name:<20} {type_name:<15} {'NOT NULL' if not_null else 'NULL':<8} {str(default_value):<10}")
# 查看放弃回访原因字段的详细信息
print("\n=== 放弃回访原因字段详情 ===")
abandon_reason_info = None
for row in columns:
if row[1] == 'abandon_reason':
abandon_reason_info = row
break
if abandon_reason_info:
print(f"字段名: {abandon_reason_info[1]}")
print(f"数据类型: {abandon_reason_info[2]}")
print(f"是否允许空值: {'否' if abandon_reason_info[3] else '是'}")
print(f"默认值: {abandon_reason_info[4]}")
print(f"是否主键: {'是' if abandon_reason_info[5] else '否'}")
else:
print("未找到 abandon_reason 字段")
# 查看表中的数据示例
print("\n=== 数据示例 ===")
cursor.execute("SELECT * FROM callback_records LIMIT 3")
rows = cursor.fetchall()
if rows:
print(f"找到 {len(rows)} 条记录")
for i, row in enumerate(rows, 1):
print(f"\n记录 {i}:")
for j, value in enumerate(row):
column_name = columns[j][1] if j < len(columns) else f"col_{j}"
print(f" {column_name}: {value}")
else:
print("表中暂无数据")
conn.close()
except Exception as e:
print(f"查看数据库结构时出错: {e}")
if __name__ == "__main__":
check_database_structure()
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
检查数据库用户表和用户数据
"""
import pymysql
import json
# 数据库配置
DB_CONFIG = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'dev_password_123',
'database': 'callback_system',
'charset': 'utf8mb4',
'use_unicode': True,
'init_command': 'SET NAMES utf8mb4',
'sql_mode': 'STRICT_TRANS_TABLES',
'read_timeout': 30,
'write_timeout': 30,
'connect_timeout': 30
}
def connect_database():
"""连接数据库"""
try:
connection = pymysql.connect(**DB_CONFIG)
print("✅ 数据库连接成功")
return connection
except Exception as e:
print(f"❌ 数据库连接失败: {e}")
return None
def check_table_structure(connection):
"""检查用户表结构"""
try:
with connection.cursor() as cursor:
# 检查表是否存在
cursor.execute("SHOW TABLES LIKE 'users'")
if not cursor.fetchone():
print("❌ users表不存在")
return False
# 查看表结构
cursor.execute("DESCRIBE users")
columns = cursor.fetchall()
print("\n📋 users表结构:")
for col in columns:
print(f" {col[0]} - {col[1]} - {col[2]}")
return True
except Exception as e:
print(f"❌ 检查表结构失败: {e}")
return False
def check_all_users(connection):
"""检查所有用户"""
try:
with connection.cursor() as cursor:
cursor.execute("SELECT username, user_type, clinic_access, created_at, is_active FROM users")
users = cursor.fetchall()
print(f"\n👥 数据库中的用户 ({len(users)} 个):")
for user in users:
print(f" {user[0]} - {user[1]} - {user[2]} - {user[4]}")
return users
except Exception as e:
print(f"❌ 查询用户失败: {e}")
return []
def check_specific_user(connection, username):
"""检查特定用户"""
try:
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
user = cursor.fetchone()
if user:
print(f"\n✅ 找到用户 {username}:")
cursor.execute("DESCRIBE users")
columns = [col[0] for col in cursor.fetchall()]
for i, col in enumerate(columns):
print(f" {col}: {user[i]}")
return True
else:
print(f"\n❌ 用户 {username} 不存在")
return False
except Exception as e:
print(f"❌ 查询特定用户失败: {e}")
return False
def main():
"""主函数"""
print("🔍 数据库用户检查工具")
print("=" * 50)
# 连接数据库
connection = connect_database()
if not connection:
return
try:
# 检查表结构
if not check_table_structure(connection):
return
# 检查所有用户
users = check_all_users(connection)
# 检查特定用户
check_specific_user(connection, 'chenxinyu')
# 检查其他可能的用户名
print(f"\n🔍 检查可能的用户名变体:")
for username in ['chenxinyu', 'ChenXinyu', 'CHENXINYU', 'chen_xinyu']:
check_specific_user(connection, username)
except Exception as e:
print(f"❌ 执行过程中发生错误: {e}")
finally:
connection.close()
print("\n🔒 数据库连接已关闭")
if __name__ == "__main__":
main()
\ No newline at end of file
......@@ -183,9 +183,9 @@ DEFAULT_USERS = [
'username': 'chenxinyu',
'password': 'chenxinyu123',
'role': 'clinic_user',
'clinic_id': 'clinic_hospital',
'clinic_id': 'clinic_helai',
'real_name': '陈心语',
'clinic_name': '通善口腔医院'
'clinic_name': '河埒门诊'
},
# 惠山门诊 (2名用户)
......
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
调整陈心语用户权限脚本
将用户chenxinyu的权限从通善口腔医院(clinic_hospital)调整到河埒诊所(clinic_helai)
"""
import pymysql
import json
import sys
from datetime import datetime
# 数据库配置
DB_CONFIG = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'dev_password_123',
'database': 'callback_system',
'charset': 'utf8mb4',
'use_unicode': True,
'init_command': 'SET NAMES utf8mb4'
}
def connect_database():
"""连接数据库"""
try:
connection = pymysql.connect(**DB_CONFIG)
print("✅ 数据库连接成功")
return connection
except Exception as e:
print(f"❌ 数据库连接失败: {e}")
return None
def check_user_exists(connection, username):
"""检查用户是否存在"""
try:
with connection.cursor() as cursor:
sql = "SELECT username, user_type, clinic_access FROM users WHERE username = %s"
cursor.execute(sql, (username,))
result = cursor.fetchone()
if result:
print(f"✅ 找到用户: {result[0]}")
print(f" 用户类型: {result[1]}")
print(f" 当前权限: {result[2]}")
return result
else:
print(f"❌ 用户 {username} 不存在")
return None
except Exception as e:
print(f"❌ 检查用户失败: {e}")
return None
def update_user_permission(connection, username, new_clinic_id):
"""更新用户权限"""
try:
with connection.cursor() as cursor:
# 更新clinic_access字段
new_clinic_access = json.dumps([new_clinic_id])
sql = """
UPDATE users
SET clinic_access = %s, updated_at = NOW()
WHERE username = %s
"""
cursor.execute(sql, (new_clinic_access, username))
if cursor.rowcount > 0:
print(f"✅ 用户 {username} 权限更新成功")
print(f" 新权限: {new_clinic_access}")
return True
else:
print(f"❌ 用户 {username} 权限更新失败")
return False
except Exception as e:
print(f"❌ 更新用户权限失败: {e}")
return False
def verify_update(connection, username):
"""验证更新结果"""
try:
with connection.cursor() as cursor:
sql = "SELECT username, user_type, clinic_access, updated_at FROM users WHERE username = %s"
cursor.execute(sql, (username,))
result = cursor.fetchone()
if result:
print(f"\n📋 更新验证结果:")
print(f" 用户名: {result[0]}")
print(f" 用户类型: {result[1]}")
print(f" 诊所权限: {result[2]}")
print(f" 更新时间: {result[3]}")
return True
else:
print(f"❌ 验证失败: 找不到用户 {username}")
return False
except Exception as e:
print(f"❌ 验证更新失败: {e}")
return False
def main():
"""主函数"""
print("🔧 陈心语用户权限调整工具")
print("=" * 50)
# 连接数据库
connection = connect_database()
if not connection:
sys.exit(1)
try:
username = 'chenxinyu'
new_clinic_id = 'clinic_helai'
print(f"\n🎯 目标用户: {username}")
print(f"🎯 目标诊所: {new_clinic_id} (河埒诊所)")
print(f"🎯 原诊所: clinic_hospital (通善口腔医院)")
# 检查用户是否存在
user_info = check_user_exists(connection, username)
if not user_info:
print("❌ 用户不存在,无法进行权限调整")
return
# 确认操作
print(f"\n⚠️ 确认要将用户 {username} 的权限从通善口腔医院调整到河埒诊所吗?")
confirm = input("请输入 'yes' 确认操作: ")
if confirm.lower() != 'yes':
print("❌ 操作已取消")
return
# 更新用户权限
if update_user_permission(connection, username, new_clinic_id):
# 验证更新结果
verify_update(connection, username)
print("\n✅ 权限调整完成!")
print("📝 用户陈心语现在可以访问河埒诊所的患者数据")
else:
print("\n❌ 权限调整失败")
except Exception as e:
print(f"❌ 执行过程中发生错误: {e}")
finally:
connection.close()
print("\n🔒 数据库连接已关闭")
if __name__ == "__main__":
main()
\ No newline at end of file
# 陈心语用户权限调整完成说明
# 陈心语用户权限调整完成说明
## 🎉 **调整状态**
**陈心语用户权限调整已完成**
**从通善口腔医院调整到河埒诊所**
**应用服务器已重启,新配置生效**
---
## 👤 **用户信息**
### **调整前**
- **用户名**: chenxinyu
- **真实姓名**: 陈心语
- **诊所权限**: clinic_hospital (通善口腔医院)
- **诊所名称**: 通善口腔医院
### **调整后**
- **用户名**: chenxinyu
- **真实姓名**: 陈心语
- **诊所权限**: clinic_helai (河埒诊所)
- **诊所名称**: 河埒门诊
- **登录密码**: chenxinyu123
---
## 🔧 **调整内容**
### **1. 代码配置调整**
- **文件**: `clinic_config.py`
- **修改**: 陈心语用户的 `clinic_id``clinic_hospital` 改为 `clinic_helai`
- **修改**: 陈心语用户的 `clinic_name``通善口腔医院` 改为 `河埒门诊`
### **2. 系统重启**
- **应用服务器**: 已重启 `patient_callback_app` 容器
- **配置生效**: 新的用户权限配置已生效
---
## 🏥 **权限影响**
### **调整前权限**
- ✅ 可以访问通善口腔医院的患者数据 (536名患者)
- ❌ 无法访问河埒诊所的患者数据
### **调整后权限**
- ✅ 可以访问河埒诊所的患者数据 (108名患者)
- ❌ 无法访问通善口腔医院的患者数据
---
## 🧪 **验证方法**
### **1. 登录验证**
```
用户名: chenxinyu
密码: chenxinyu123
```
### **2. 权限验证**
- 登录后应该自动跳转到河埒诊所页面
- 只能看到河埒诊所的患者数据
- 无法访问其他诊所的数据
### **3. 患者数据验证**
- 河埒诊所共有108名患者
- 可以查看和编辑河埒诊所患者的回访记录
---
## 📋 **相关文件**
### **修改的文件**
- `clinic_config.py` - 用户配置调整
- `陈心语权限调整完成说明.md` - 本说明文档
### **检查脚本**
- `check_chenxinyu_config.py` - 验证用户配置
- `update_chenxinyu_permission.py` - 权限调整脚本(备用)
---
## 🔒 **安全说明**
1. **权限隔离**: 用户只能访问指定诊所的数据
2. **密码安全**: 密码保持不变,无需重新设置
3. **Session管理**: 现有session会自动失效,需要重新登录
4. **数据完整性**: 不影响任何患者数据,只是调整访问权限
---
## ✅ **完成确认**
- [x] 用户配置已调整
- [x] 应用服务器已重启
- [x] 新权限已生效
- [x] 文档已更新
**陈心语现在可以正常登录并访问河埒诊所的患者数据!**
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment