完善老师页面,数据管理增加按key筛查
This commit is contained in:
103
elastic/views.py
103
elastic/views.py
@@ -51,6 +51,26 @@ def _filter_results_for_user(request, results):
|
||||
|
||||
uid = str(session_user_id)
|
||||
manage_keys = me.get("manage_key", []) or []
|
||||
manage_keys_set = {str(k).strip() for k in manage_keys if str(k).strip()}
|
||||
writer_keys_by_id = None
|
||||
if manage_keys_set:
|
||||
try:
|
||||
users = get_all_users() or []
|
||||
except Exception:
|
||||
users = []
|
||||
writer_keys_by_id = {}
|
||||
for u in users:
|
||||
try:
|
||||
u_id = str(u.get("user_id", "")).strip()
|
||||
except Exception:
|
||||
u_id = ""
|
||||
if not u_id:
|
||||
continue
|
||||
try:
|
||||
u_keys = {str(k).strip() for k in (u.get("key") or []) if str(k).strip()}
|
||||
except Exception:
|
||||
u_keys = set()
|
||||
writer_keys_by_id[u_id] = u_keys
|
||||
|
||||
filtered = []
|
||||
for r in results:
|
||||
@@ -59,11 +79,16 @@ def _filter_results_for_user(request, results):
|
||||
filtered.append(r)
|
||||
continue
|
||||
|
||||
# 2. 管理的提交
|
||||
if manage_keys:
|
||||
# 2. 管理的提交:优先按“作者的 key 与我的 manage_key 交集”判断;缺失时回退为 data 字符串包含判断
|
||||
if manage_keys_set:
|
||||
writer_id = str(r.get("writer_id", "")).strip()
|
||||
writer_keys = (writer_keys_by_id or {}).get(writer_id)
|
||||
if writer_keys and (writer_keys & manage_keys_set):
|
||||
filtered.append(r)
|
||||
continue
|
||||
r_data = str(r.get("data", ""))
|
||||
for mk in manage_keys:
|
||||
if mk and str(mk) in r_data:
|
||||
for mk in manage_keys_set:
|
||||
if mk and mk in r_data:
|
||||
filtered.append(r)
|
||||
break
|
||||
return filtered
|
||||
@@ -221,6 +246,55 @@ def get_all_data(request):
|
||||
except Exception as e:
|
||||
return JsonResponse({"status": "error", "message": str(e)}, status=500)
|
||||
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
def filter_by_key(request):
|
||||
try:
|
||||
session_user_id = request.session.get("user_id")
|
||||
if session_user_id is None:
|
||||
return JsonResponse({"status": "error", "message": "未登录"}, status=401)
|
||||
|
||||
key = (request.GET.get("key") or "").strip()
|
||||
results = search_all()
|
||||
results = _filter_results_for_user(request, results)
|
||||
if not key:
|
||||
data = _attach_writer_names(_attach_image_urls(request, results))
|
||||
return JsonResponse({"status": "success", "data": data})
|
||||
|
||||
selected = str(key).strip()
|
||||
try:
|
||||
users = get_all_users() or []
|
||||
except Exception:
|
||||
users = []
|
||||
writer_keys_by_id = {}
|
||||
for u in users:
|
||||
try:
|
||||
u_id = str(u.get("user_id", "")).strip()
|
||||
except Exception:
|
||||
u_id = ""
|
||||
if not u_id:
|
||||
continue
|
||||
try:
|
||||
u_keys = {str(k).strip() for k in (u.get("key") or []) if str(k).strip()}
|
||||
except Exception:
|
||||
u_keys = set()
|
||||
writer_keys_by_id[u_id] = u_keys
|
||||
|
||||
filtered = []
|
||||
for r in results:
|
||||
writer_id = str(r.get("writer_id", "")).strip()
|
||||
writer_keys = writer_keys_by_id.get(writer_id)
|
||||
if writer_keys and selected in writer_keys:
|
||||
filtered.append(r)
|
||||
continue
|
||||
if selected and selected in str(r.get("data", "")):
|
||||
filtered.append(r)
|
||||
|
||||
data = _attach_writer_names(_attach_image_urls(request, filtered))
|
||||
return JsonResponse({"status": "success", "data": data})
|
||||
except Exception as e:
|
||||
return JsonResponse({"status": "error", "message": str(e)}, status=500)
|
||||
|
||||
@require_http_methods(["DELETE"])
|
||||
@csrf_exempt
|
||||
def delete_data(request, doc_id):
|
||||
@@ -1048,6 +1122,27 @@ def list_registration_codes_view(request):
|
||||
data = list_registration_codes()
|
||||
return JsonResponse({"status": "success", "data": data})
|
||||
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
def keys_for_filter_view(request):
|
||||
uid = request.session.get("user_id")
|
||||
if uid is None:
|
||||
return JsonResponse({"status": "error", "message": "未登录"}, status=401)
|
||||
is_admin = int(request.session.get("permission", 1)) == 0
|
||||
if is_admin:
|
||||
lst = get_keys_list()
|
||||
return JsonResponse({"status": "success", "data": lst})
|
||||
me = get_user_by_id(uid) or {}
|
||||
seen = set()
|
||||
out = []
|
||||
for v in list(me.get("manage_key") or []) + list(me.get("key") or []):
|
||||
s = str(v).strip()
|
||||
if not s or s in seen:
|
||||
continue
|
||||
seen.add(s)
|
||||
out.append(s)
|
||||
return JsonResponse({"status": "success", "data": out})
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
@csrf_protect
|
||||
def revoke_registration_code_view(request):
|
||||
|
||||
Reference in New Issue
Block a user