更新用户管理,现在能通过班导师,管理员,学生进入对应的页面进行密码修改
This commit is contained in:
@@ -222,16 +222,27 @@ def add_user(request):
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
def get_users(request):
|
||||
if request.session.get("user_id") is None:
|
||||
uid = request.session.get("user_id")
|
||||
if uid is None:
|
||||
return JsonResponse({"status": "error", "message": "未登录"}, status=401)
|
||||
if int(request.session.get("permission", 1)) != 0:
|
||||
return JsonResponse({"status": "error", "message": "无权限"}, status=403)
|
||||
try:
|
||||
is_admin = int(request.session.get("permission", 1)) == 0
|
||||
requester = get_user_by_id(uid) or {}
|
||||
mgr_keys = set(requester.get("manage_key") or [])
|
||||
q = (request.GET.get("search") or "").strip()
|
||||
users = get_all_users()
|
||||
if is_admin:
|
||||
filtered = users
|
||||
elif mgr_keys:
|
||||
def match_manage(user):
|
||||
ukeys = set(user.get("key") or [])
|
||||
return bool(ukeys & mgr_keys)
|
||||
filtered = [u for u in users if match_manage(u)]
|
||||
else:
|
||||
filtered = [u for u in users if str(u.get("user_id")) == str(uid)]
|
||||
if q:
|
||||
users = [u for u in users if q in str(u.get("username", ""))]
|
||||
return JsonResponse({"status": "success", "data": users})
|
||||
filtered = [u for u in filtered if q in str(u.get("username", ""))]
|
||||
return JsonResponse({"status": "success", "data": filtered})
|
||||
except Exception as e:
|
||||
return JsonResponse({"status": "error", "message": str(e)}, status=500)
|
||||
|
||||
@@ -239,10 +250,9 @@ def get_users(request):
|
||||
@require_http_methods(["POST"])
|
||||
@csrf_protect
|
||||
def update_user_by_id_view(request, user_id):
|
||||
if request.session.get("user_id") is None:
|
||||
uid = request.session.get("user_id")
|
||||
if uid is None:
|
||||
return JsonResponse({"status": "error", "message": "未登录"}, status=401)
|
||||
if int(request.session.get("permission", 1)) != 0:
|
||||
return JsonResponse({"status": "error", "message": "无权限"}, status=403)
|
||||
try:
|
||||
payload = json.loads(request.body.decode("utf-8"))
|
||||
except Exception:
|
||||
@@ -250,21 +260,41 @@ def update_user_by_id_view(request, user_id):
|
||||
new_username = (payload.get("username") or "").strip()
|
||||
new_permission = payload.get("permission")
|
||||
new_password = (payload.get("password") or "").strip()
|
||||
if new_username:
|
||||
other = get_user_by_username(new_username)
|
||||
if other and int(other.get("user_id", -1)) != int(user_id):
|
||||
return JsonResponse({"status": "error", "message": "用户名已存在"}, status=409)
|
||||
if new_password and len(new_password) < 6:
|
||||
return JsonResponse({"status": "error", "message": "密码长度至少为6位"}, status=400)
|
||||
ok = es_update_user_by_id(
|
||||
user_id,
|
||||
username=new_username if new_username else None,
|
||||
permission=int(new_permission) if new_permission is not None else None,
|
||||
password=new_password if new_password else None,
|
||||
)
|
||||
if not ok:
|
||||
return JsonResponse({"status": "error", "message": "用户更新失败"}, status=500)
|
||||
return JsonResponse({"status": "success", "message": "用户更新成功"})
|
||||
|
||||
is_admin = int(request.session.get("permission", 1)) == 0
|
||||
requester = get_user_by_id(uid) or {}
|
||||
target = get_user_by_id(user_id) or {}
|
||||
requester_mgr = set(requester.get("manage_key") or [])
|
||||
target_keys = set(target.get("key") or [])
|
||||
|
||||
if is_admin:
|
||||
if new_username:
|
||||
other = get_user_by_username(new_username)
|
||||
if other and int(other.get("user_id", -1)) != int(user_id):
|
||||
return JsonResponse({"status": "error", "message": "用户名已存在"}, status=409)
|
||||
ok = es_update_user_by_id(
|
||||
user_id,
|
||||
username=new_username if new_username else None,
|
||||
permission=int(new_permission) if new_permission is not None else None,
|
||||
password=new_password if new_password else None,
|
||||
)
|
||||
return JsonResponse({"status": "success"}) if ok else JsonResponse({"status": "error", "message": "用户更新失败"}, status=500)
|
||||
|
||||
if str(uid) == str(user_id):
|
||||
if not new_password:
|
||||
return JsonResponse({"status": "error", "message": "仅允许修改密码"}, status=400)
|
||||
ok = es_update_user_by_id(user_id, password=new_password)
|
||||
return JsonResponse({"status": "success"}) if ok else JsonResponse({"status": "error", "message": "用户更新失败"}, status=500)
|
||||
|
||||
if requester_mgr and (target_keys & requester_mgr):
|
||||
if not new_password or new_username or new_permission is not None:
|
||||
return JsonResponse({"status": "error", "message": "导师仅允许修改密码"}, status=403)
|
||||
ok = es_update_user_by_id(user_id, password=new_password)
|
||||
return JsonResponse({"status": "success"}) if ok else JsonResponse({"status": "error", "message": "用户更新失败"}, status=500)
|
||||
|
||||
return JsonResponse({"status": "error", "message": "无权限"}, status=403)
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
@csrf_protect
|
||||
@@ -598,11 +628,16 @@ def user_manage(request):
|
||||
if session_user_id is None:
|
||||
from django.shortcuts import redirect
|
||||
return redirect("/accounts/login/")
|
||||
if int(request.session.get("permission", 1)) != 0:
|
||||
from django.shortcuts import redirect
|
||||
return redirect("/main/home/")
|
||||
is_admin = int(request.session.get("permission", 1)) == 0
|
||||
me = get_user_by_id(session_user_id) or {}
|
||||
has_manage = bool(me.get("manage_key"))
|
||||
user_id_qs = request.GET.get("user_id")
|
||||
context = {"user_id": user_id_qs or session_user_id}
|
||||
context = {
|
||||
"user_id": user_id_qs or session_user_id,
|
||||
"is_admin": is_admin,
|
||||
"is_tutor": (not is_admin) and has_manage,
|
||||
"is_student": (not is_admin) and (not has_manage),
|
||||
}
|
||||
return render(request, "elastic/users.html", context)
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
|
||||
Reference in New Issue
Block a user