57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
from flask import render_template, request, redirect, url_for, flash
|
|
from flask_login import login_required, current_user
|
|
from scripts.models import db, User, Device
|
|
|
|
|
|
def init_user_routes(app):
|
|
def is_admin_user():
|
|
"""允许统计员/管理员或名称为 Admin 的用户管理账号"""
|
|
return current_user.role in ['统计员', '管理员', 'admin'] or current_user.name == 'Admin'
|
|
|
|
@app.route('/users', methods=['GET'])
|
|
@login_required
|
|
def user_list():
|
|
if not is_admin_user():
|
|
app.logger.warning(f'未授权访问:用户 {current_user.name} 尝试访问用户管理')
|
|
flash('您没有权限访问此页面')
|
|
return redirect(url_for('dashboard'))
|
|
|
|
users = User.query.order_by(User.name).all()
|
|
branch_options = [b[0] for b in db.session.query(Device.branch).distinct().all() if b[0]]
|
|
role_options = ['统计员', '装维员', '管理员']
|
|
|
|
return render_template(
|
|
'users.html',
|
|
users=users,
|
|
branch_options=branch_options,
|
|
role_options=role_options
|
|
)
|
|
|
|
@app.route('/users/<phone>', methods=['POST'])
|
|
@login_required
|
|
def update_user(phone):
|
|
if not is_admin_user():
|
|
app.logger.warning(f'未授权访问:用户 {current_user.name} 尝试修改用户 {phone}')
|
|
flash('您没有权限执行此操作')
|
|
return redirect(url_for('dashboard'))
|
|
|
|
user = User.query.filter_by(phone=phone).first()
|
|
if not user:
|
|
flash('用户不存在')
|
|
return redirect(url_for('user_list'))
|
|
|
|
new_branch = request.form.get('branch', '').strip()
|
|
new_role = request.form.get('role', '').strip()
|
|
|
|
if new_role and new_role not in ['统计员', '装维员', '管理员']:
|
|
flash('角色不合法')
|
|
return redirect(url_for('user_list'))
|
|
|
|
user.branch = new_branch
|
|
user.role = new_role
|
|
db.session.commit()
|
|
app.logger.info(f'用户信息已更新: {user.name}({user.phone}) -> branch={user.branch}, role={user.role}')
|
|
flash('用户信息已更新')
|
|
return redirect(url_for('user_list'))
|
|
|