管理后台加入群权限管理功能

This commit is contained in:
liuwei
2025-03-25 10:00:00 +08:00
parent 63e3aad65f
commit d0b9e4651f
2 changed files with 101 additions and 2 deletions

View File

@@ -8,7 +8,7 @@ from flask import Flask, render_template, request, jsonify, redirect, url_for, s
from db.connection import DBConnectionManager
from db.stats_db import StatsDBOperator
from utils.wechat.contact_manager import ContactManager
from robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus
class DashboardServer:
"""统计看板服务器"""
@@ -69,6 +69,96 @@ class DashboardServer:
def errors():
return render_template('errors.html')
# 在_create_app方法中添加新的路由
@app.route('/robot_management')
def robot_management():
return render_template('robot_management.html')
@app.route('/api/robot/groups')
def api_robot_groups():
# 获取所有群组列表
groups = GroupBotManager.get_group_list()
group_data = []
for group_id in groups:
group_name = self.contact_manager.get_nickname(group_id)
robot_status = GroupBotManager.get_group_permission(group_id, Feature.ROBOT)
group_data.append({
"group_id": group_id,
"group_name": group_name,
"robot_status": robot_status.value
})
return jsonify({"success": True, "data": group_data})
@app.route('/api/robot/group/<group_id>/permissions')
def api_robot_group_permissions(group_id):
permissions = GroupBotManager.list_group_permissions(group_id)
permission_data = []
for feature, status in permissions.items():
permission_data.append({
"feature_id": feature.value,
"feature_name": feature.name,
"feature_description": feature.description,
"status": status.value
})
return jsonify({"success": True, "data": permission_data})
@app.route('/api/robot/group/<group_id>/permissions', methods=['POST'])
def api_update_robot_permissions(group_id):
# 更新群组功能权限
from robot_cmd.robot_command import GroupBotManager, Feature, PermissionStatus
data = request.json
feature_id = data.get('feature_id')
status = data.get('status')
try:
feature = Feature(int(feature_id))
new_status = PermissionStatus(status)
# 特殊处理ROBOT功能
if feature == Feature.ROBOT:
r = self.db_manager.get_redis_connection()
if new_status == PermissionStatus.ENABLED:
GroupBotManager.local_cache["group_list"].add(group_id)
r.sadd("group:list", group_id)
else:
GroupBotManager.local_cache["group_list"].remove(group_id)
r.srem("group:list", group_id)
GroupBotManager.set_group_permission(group_id, feature, new_status)
return jsonify({"success": True})
except Exception as e:
self.logger.error(f"更新群组权限失败: {e}")
return jsonify({"success": False, "error": str(e)}), 400
@app.route('/api/robot/batch_operation', methods=['POST'])
def api_robot_batch_operation():
# 批量操作接口
data = request.json
operation = data.get('operation')
group_ids = data.get('group_ids', [])
results = {}
try:
if operation == 'remove_groups':
for group_id in group_ids:
result = GroupBotManager.remove_group(group_id)
results[group_id] = result
return jsonify({"success": True, "results": results})
else:
return jsonify({"success": False, "error": "不支持的操作类型"}), 400
except Exception as e:
self.logger.error(f"批量操作失败: {e}")
return jsonify({"success": False, "error": str(e)}), 400
@app.route('/api/plugin_stats')
def api_plugin_stats():
days = request.args.get('days', 7, type=int)
@@ -197,3 +287,4 @@ class DashboardServer:
except Exception as e:
if hasattr(self, 'logger'):
self.logger.error(f"DashboardServer 析构时出错: {e}")

View File

@@ -103,6 +103,13 @@
<i class="el-icon-warning"></i>
<span slot="title">错误日志</span>
</el-menu-item>
<!-- 在左侧菜单中添加群机器人管理选项 -->
<!-- 找到el-menu标签内的菜单项列表添加以下内容 -->
<el-menu-item index="6">
<i class="el-icon-setting"></i>
<span slot="title">群机器人管理</span>
</el-menu-item>
</el-menu>
</div>
@@ -153,7 +160,8 @@
'2': '/plugins',
'3': '/users',
'4': '/groups',
'5': '/errors'
'5': '/errors',
'6': '/robot_management'
};
// 如果当前不在对应页面,则跳转