def user_edit(): ''' 用户编辑 :return: ''' id = request.argget.all('id') role_id = request.argget.all('role_id') active = str_to_num(request.argget.all('active', 0)) s, r = arg_verify(reqargs=[("id", id), ("role_id", role_id)], required=True) if not s: return r data = {'msg': gettext("Update success"), 'msg_type': "s", "http_status":201} update_data = { 'role_id': role_id, 'active': active, } user = mdb_user.db.user.find_one({"_id": ObjectId(id)}) if user: # 权限检查 current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)}) edit_user_role = mdb_user.db.role.find_one({"_id": ObjectId(user["role_id"])}) if edit_user_role \ and get_num_digits(current_user_role["permissions"]) \ <= get_num_digits(edit_user_role["permissions"]): # 没有权限修改 data = {"msg_type": "w", "msg": gettext("No permission modification"), "http_status":401} return data r = mdb_user.db.user.update_one({"_id": ObjectId(id)}, {"$set": update_data}) if not r.modified_count: data = {'msg': gettext("No changes"), 'msg_type': "w", "http_status":201} return data
def user_restore(): ids = json_to_pyseq(request.argget.all('ids', [])) noper = 0 re_ids = [] for i in range(0, len(ids)): # 检查是否有权限 current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)}) re_user = mdb_user.db.user.find_one({"_id": ObjectId(ids[i])}, {"role_id": 1}) re_user_role = mdb_user.db.role.find_one({"_id": ObjectId(re_user["role_id"])}) if get_num_digits(current_user_role["permissions"]) <= get_num_digits(re_user_role["permissions"]): # 没有权限恢复 noper += 1 continue re_ids.append(ObjectId(ids[i])) update_data = { 'is_delete': 0 } r = mdb_user.db.user.update_many({"_id": {"$in": re_ids}}, {"$set": update_data}) if r.modified_count: data = {'msg': gettext( "Restore the {} users,The other {} users have no power control".format(r.modified_count, noper)), 'msg_type': "s", "http_status":201} else: data = {'msg': gettext("Restore the failure.May not have permission"), 'msg_type': "w", "http_status":401} return data
def user_activation(): active = int(request.argget.all('active', 0)) ids = json_to_pyseq(request.argget.all('ids', [])) noper = 0 ac_ids = [] for i in range(0, len(ids)): # 检查是否有权限 current_user_role = mdb_user.db.role.find_one({"_id": ObjectId(current_user.role_id)}) re_user = mdb_user.db.user.find_one({"_id": ObjectId(ids[i])}, {"role_id": 1}) re_user_role = mdb_user.db.role.find_one({"_id": ObjectId(re_user["role_id"])}) if get_num_digits(current_user_role["permissions"]) <= get_num_digits(re_user_role["permissions"]): # 没有权限恢复 noper += 1 continue ac_ids.append(ObjectId(ids[i])) update_data = { 'active': active } r = mdb_user.db.user.update_many({"_id": {"$in": ac_ids}}, {"$set": update_data}) if r.modified_count: data = {'msg': gettext( "{} user activation is successful, {} no permission to operate".format(r.modified_count, noper)), 'msg_type': "s", "http_status":201} else: data = {'msg': gettext("Activation failed.May not have permission"), 'msg_type': "w", "http_status":401} return data
def user_del(): ids = json_to_pyseq(request.argget.all('ids', [])) permanent = request.argget.all('permanent', 0) try: permanent = int(permanent) except BaseException: pass noper = 0 temp_ids = ids[:] ids = [] for tid in temp_ids: # 检查是否有权限 current_user_role = mdbs["user"].db.role.find_one({"_id": ObjectId(current_user.role_id)}) rm_user = get_one_user(user_id=str(tid)) rm_user_role = mdbs["user"].db.role.find_one({"_id": ObjectId(rm_user["role_id"])}) if get_num_digits(current_user_role["permissions"]) <= get_num_digits(rm_user_role["permissions"]): # 没有权限删除 continue ids.append(ObjectId(tid)) if not permanent: update_data = { 'is_delete': 1 } r = mdbs["user"].db.user.update_many( {"_id": {"$in": ids}}, {"$set": update_data}) if r.modified_count: for uid in ids: clean_get_one_user_cache(user_id=uid) data = { 'msg': gettext("Has recovered {} users, {} users can not operate").format( r.modified_count, noper), 'msg_type': "s", "custom_status": 201} else: data = { 'msg': gettext("Recycle user failed.May not have permission"), 'msg_type': "w", "custom_status": 401} else: # 永久删除 r = mdbs["user"].db.user.delete_many( {"_id": {"$in": ids}, "is_delete": {"$in": [1, True]}}) if r.deleted_count: data = { 'msg': gettext( "{} users have been deleted and {} users can not be deleted".format( r.deleted_count, noper)), 'msg_type': "s", "custom_status": 204} else: data = { 'msg': gettext("Failed to delete.May not have permission"), 'msg_type': "w", "custom_status": 401} return data
def add_role(): name = request.argget.all('name').strip() instructions = request.argget.all('instructions').strip() default = int(request.argget.all('default', False).strip()) temp_permissions = json_to_pyseq(request.argget.all('permissions', [])) data = { 'msg': gettext("Add a success"), 'msg_type': "s", "custom_status": 201} permissions = 0x0 for i in temp_permissions: permissions = permissions | int(i) s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True) if not s: return r elif not mdbs["user"].db.role.find_one({gettext("name"): name}): # 权限检查 user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(current_user.role_id)}) if get_num_digits(user_role["permissions"] ) <= get_num_digits(permissions): data = { "msg": gettext( "The current user permissions are lower than the permissions that you want to add," " without permission to add"), "msg_type": "w", "custom_status": 401} return data if default: if not mdbs["user"].db.role.find_one({"default": {"$in": [1, True]}}): mdbs["user"].db.role.insert_one({"name": name, "instructions": instructions, 'permissions': permissions, "default": default}) else: data = { 'msg': gettext("Existing default role"), 'msg_type': "w", "custom_status": 403} else: mdbs["user"].db.role.insert_one({"name": name, "instructions": instructions, 'permissions': permissions, "default": default}) else: data = { 'msg': gettext("Role name already exists"), 'msg_type': "w", "custom_status": 403} return data
def add_per(): name = request.argget.all('name', '').strip() explain = request.argget.all('explain') default = int(request.argget.all('is_default', 0).strip()) position = str_to_num(request.argget.all('position', 0)) data = { 'msg': gettext("Add a success"), 'msg_type': "s", "custom_status": 201} s, r = arg_verify( reqargs=[ (gettext("name"), name), (gettext("position"), position)], required=True) if not s: return r hightest_pos = get_num_digits(SUPER_PER) permissions = int(math.pow(2, position - 1)) if hightest_pos > hightest_pos and position < 1: data = { 'msg': gettext( "Must be an integer greater than 0," " less than or equal to {}".format(hightest_pos)), 'msg_type': "w", "custom_status": 403} elif mdbs["user"].db.permission.find_one({"name": name}): data = {'msg': gettext("Permission name or valready exists"), 'msg_type': "w", "custom_status": 403} elif mdbs["user"].db.permission.find_one({"value": permissions}): data = {'msg': gettext('Location has been used'), 'msg_type': "w", "custom_status": 403} else: user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(current_user.role_id)}) if get_num_digits(user_role["permissions"] ) <= get_num_digits(permissions): data = { "msg": gettext( "The current user permissions are lower than the permissions that you want to add," " without permission to add"), "msg_type": "w", "custom_status": 401} return data mdbs["user"].db.permission.insert_one({"name": name, "explain": explain, 'value': permissions, "is_default": default}) cache.delete(key=GET_DEFAULT_SYS_PER_CACHE_KEY, db_type="redis") cache.delete(key=GET_ALL_PERS_CACHE_KEY, db_type="redis") return data
def delete_role(): ids = json_to_pyseq(request.argget.all('ids')) user_role = mdb_user.db.role.find_one( {"_id": ObjectId(current_user.role_id)}) noper = 0 exist_user_role = 0 for id in ids: id = ObjectId(id) # 权限检查 old_role = mdb_user.db.role.find_one({"_id": id}) # 如果当前用户的权限最高位 小于 要删除角色的权限,也是不可以 if old_role and get_num_digits( old_role["permissions"]) >= get_num_digits( user_role["permissions"]): noper += 1 continue if mdb_user.db.user.find({ "role_id": id, "is_delete": { "$in": [0, False, None] } }).count(True): exist_user_role += 1 else: mdb_user.db.role.delete_many({"_id": id}) if not noper: data = { 'msg': gettext( 'Delete the success, {} of the roles have users and cannot be deleted' ).format(exist_user_role), 'msg_type': 's', "http_status": 204 } else: data = { 'msg': gettext( '{} role do not have permission to delete,' ' {} of the roles have users and cannot be deleted').format( noper, exist_user_role), 'msg_type': 'w', "http_status": 400 } return data
def permissions(): """ 只获取name,value, explain,以及已使用的权重位置 :return: """ data = [] positions = list(range(1, get_num_digits(SUPER_PER) + 1)) for per in mdbs["user"].dbs["permission"].find( {"value": {"$exists": True}}).sort([("value", -1)]): temp_pos = get_num_digits(per["value"]) if temp_pos in positions: positions.remove(temp_pos) data.append((per["name"], per["value"], per["explain"])) data = { "permissions": sorted( data, key=lambda x: x[1]), "positions": positions} return data
def permission(): """ 获取一个权限 :return: """ tid = request.argget.all('id').strip() data = {} data["per"] = mdbs["user"].db.permission.find_one({"_id": ObjectId(tid)}) if not data["per"]: data = { 'msg': gettext("The specified permission is not found"), 'msg_type': "w", "custom_status": 404} else: data["per"]["_id"] = str(data["per"]["_id"]) data["per"]["pos"] = get_num_digits(data["per"]["value"]) return data
def permissions_details(): """ 获取多个权限的详情 :return: """ data = {} page = int(request.argget.all('page', 1)) pre = int(request.argget.all('pre', 10)) rs = mdbs["user"].db.permission.find({}) data_cnt = rs.count(True) roles = list(rs.skip(pre * (page - 1)).limit(pre)) roles = sorted(roles, key=lambda x: x["value"]) for role in roles: role["pos"] = get_num_digits(role["value"]) data["pers"] = datas_paging(pre=pre, page_num=page, data_cnt=data_cnt, datas=objid_to_str(roles)) return data
def delete_per(): ids = json_to_pyseq(request.argget.all('ids')) user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(current_user.role_id)}) unauth_del_pers = [] # 无权删除的 preserve = [] # 必须保留的 need_remove = [] need_remove_per_value = [] for tid in ids: tid = ObjectId(tid) # 权限检查 old_per = mdbs["user"].db.permission.find_one({"_id": tid}) # 如果当前用户的权限最高位 小于 要删除角色的权限,也是不可以 if old_per and get_num_digits(old_per["value"]) >= get_num_digits( user_role["permissions"]): unauth_del_pers.append(old_per["name"]) continue if old_per["name"] in PRESERVE_PERS or old_per["default"]: preserve.append(old_per["name"]) continue need_remove.append(tid) need_remove_per_value.append(old_per["permissions"]) # Delete msg_updated_rolename = "" if need_remove: mdbs["user"].db.permission.delete_many({ "_id": { "$in": need_remove }, "name": { "$nin": PRESERVE_PERS } }) # 删除后必须更新使用了该权限的role和api&page updated_rolename = [] for v in need_remove_per_value: r = update_role_and_api_per(old_per_value=v, new_per_value=0) updated_rolename.extend(r["updated_rolename"]) msg_updated_rolename = gettext("The role of the chain reaction is: \n") if updated_rolename: updated_rolename = list(set(updated_rolename)) for ur in updated_rolename: msg_updated_rolename = '{}, "{}"'.format( msg_updated_rolename, ur) cache.delete(key=GET_DEFAULT_SYS_PER_CACHE_KEY, db_type="redis") cache.delete(key=GET_ALL_PERS_CACHE_KEY, db_type="redis") if not unauth_del_pers and not preserve: data = { 'msg': gettext('Successfully deleted. {}'.format(msg_updated_rolename)), 'msg_type': 'success', "custom_status": 204 } else: warning_msg = "" if unauth_del_pers: warning_msg = gettext('No permission to delete {}. ').format( ",".join(unauth_del_pers)) elif preserve: warning_msg = gettext( "{}{} are permissions that must be retained.").format( warning_msg, ",".join(preserve)) data = { 'msg': warning_msg, 'msg_type': 'warning', "custom_status": 400 } return data
def edit_per(): tid = request.argget.all('id').strip() name = request.argget.all('name', '').strip() explain = request.argget.all('explain', '') default = int(request.argget.all('is_default', 0).strip()) position = str_to_num(request.argget.all('position', 0)) s, r = arg_verify(reqargs=[(gettext("name"), name), (gettext("position"), position)], required=True) if not s: return r hightest_pos = get_num_digits(SUPER_PER) if position > hightest_pos and position < 1: data = { 'msg': gettext("Must be an integer greater than 0," " less than or equal to {}".format(hightest_pos)), 'msg_type': "w", "custom_status": 403 } return data data = { "msg": gettext( "The current user permissions are lower than the permissions you want to modify," " without permission to modify"), "msg_type": "w", "custom_status": 401 } user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(current_user.role_id)}) # 如果当前用户的权限最高位 小于 要修改成的这个角色权重的最高位,是不可以的 permissions = int(math.pow(2, position - 1)) if get_num_digits(user_role["permissions"]) <= get_num_digits(permissions): return data per = { "name": name, "explain": explain, 'value': permissions, "is_default": default } if mdbs["user"].db.permission.find_one({ "name": name, "_id": { "$ne": ObjectId(tid) } }): data = { 'msg': gettext("Permission name already exists"), 'msg_type': "w", "custom_status": 403 } elif mdbs["user"].db.permission.find_one({ "value": permissions, "_id": { "$ne": ObjectId(tid) } }): data = { 'msg': gettext('Location has been used'), 'msg_type': "w", "custom_status": 403 } else: old_per = mdbs["user"].db.permission.find_one({ "_id": ObjectId(tid), "value": { "$exists": True } }) if old_per: old_per_value = old_per["value"] r = mdbs["user"].db.permission.update_one({"_id": ObjectId(tid)}, {"$set": per}) if not r.modified_count: data = { 'msg': gettext("No changes"), 'msg_type': "w", "custom_status": 201 } else: r = update_role_and_api_per(old_per_value, new_per_value=0) updated_rolename = r["updated_rolename"] msg_updated_rolename = gettext( "The role of the chain reaction is: \n") if updated_rolename: for ur in updated_rolename: msg_updated_rolename = '{}, "{}"'.format( msg_updated_rolename, ur) else: msg_updated_rolename = '{} 0'.format(msg_updated_rolename) # 刷新缓存 cache.delete(key=GET_DEFAULT_SYS_PER_CACHE_KEY, db_type="redis") cache.delete(key=GET_ALL_PERS_CACHE_KEY, db_type="redis") data = { 'msg': gettext("The update is successful. {}".format( msg_updated_rolename)), 'msg_type': "s", "custom_status": 201 } else: data = { 'msg': gettext("Update failed"), 'msg_type': "w", "custom_status": 400 } return data
def user_edit(): """ 用户编辑 :return: """ tid = request.argget.all('id') role_id = request.argget.all('role_id') email = request.argget.all('email') password = request.argget.all('password') active = str_to_num(request.argget.all('active', 0)) s, r = arg_verify(reqargs=[("id", tid), ("role_id", role_id)], required=True) if not s: return r data = { 'msg': gettext("Update success"), 'msg_type': "s", "custom_status": 201 } if not email: email = None update_data = {'role_id': role_id, 'active': active, "email": email} user = get_one_user(user_id=str(tid)) if user: # 权限检查 current_user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(current_user.role_id)}) edit_user_role = mdbs["user"].db.role.find_one( {"_id": ObjectId(user["role_id"])}) if edit_user_role \ and get_num_digits(current_user_role["permissions"]) \ <= get_num_digits(edit_user_role["permissions"]): # 没有权限修改 data = { "msg_type": "w", "msg": gettext("No permission modification"), "custom_status": 401 } return data if email: # 邮件注册 # 邮箱格式验证 s, r = email_format_ver(email) if not s: data = {'msg': r, 'msg_type': "e", "custom_status": 422} return data elif mdbs["user"].db.user.find_one({ "email": email, "_id": { "$ne": ObjectId(tid) } }): # 邮箱是否注册过 data = { 'msg': gettext( "This email has been registered in the site oh, please login directly." ), 'msg_type': "w", "custom_status": 403 } return data if password: # 密码格式验证 s, r = password_format_ver(password) if not s: data = {'msg': r, 'msg_type': "e", "custom_status": 422} return data if password: password = generate_password_hash(password) update_data["password"] = password r = update_one_user(user_id=str(tid), updata={"$set": update_data}) if not r.modified_count: data = { 'msg': gettext("No changes"), 'msg_type': "w", "custom_status": 201 } return data
def update_url(): ''' 更新修改 url权限 :return: ''' id = request.argget.all("id") method = request.argget.all("method") login_auth = str_to_num(request.argget.all("login_auth", 0)) custom_permission = json_to_pyseq( request.argget.all("custom_permission", [])) s, r = arg_verify([("id", id)], required=True) if not s: return r s, r = arg_verify( [(gettext("method"), method)], required=True, only=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"]) if not s: return r permission = 0x0 for i in custom_permission: try: i = int(i) permission = permission | int(i) except: pass # 修改权限验证 data = { "msg": gettext( "The current user permissions are lower than the permissions you want to modify," " without permission to modify"), "msg_type": "w", "http_status": 401 } user_role = mdb_user.db.role.find_one( {"_id": ObjectId(current_user.role_id)}) # 如果当前用户的权限最高位 小于 要修改成的权重的最高位,是不可以的 if get_num_digits(user_role["permissions"]) <= get_num_digits(permission): return data old_permission = 0 old_url_per = mdb_sys.db.sys_urls.find_one({"_id": ObjectId(id)}) if old_url_per and method in old_url_per["custom_permission"]: old_permission = old_url_per["custom_permission"][method] # 如果当前用户的权限最高位 小于 要修改url请求的权限,也是不可以 if get_num_digits( user_role["permissions"]) <= get_num_digits(old_permission): return data r = mdb_sys.db.sys_urls.update_one({"_id": ObjectId(id)}, { "$set": { "custom_permission.{}".format(method): permission, "login_auth.{}".format(method): login_auth } }) if r.modified_count: # 清除缓存 r = mdb_sys.db.sys_urls.find_one({"_id": ObjectId(id)}) if r: cache.delete(key="get_sys_url_url_{}".format(r['url']), db_type="redis") data = { "msg": gettext("Modify the success"), "msg_type": "s", "http_status": 201 } else: data = { "msg": gettext("No modification"), "msg_type": "w", "http_status": 400 } return data
def edit_role(): id = request.argget.all('id').strip() name = request.argget.all('name').strip() instructions = request.argget.all('instructions').strip() default = int(request.argget.all('default', 0)) temp_permissions = json_to_pyseq(request.argget.all('permissions', [])) permissions = 0x0 for i in temp_permissions: permissions = permissions | int(i) s, r = arg_verify(reqargs=[(gettext("name"), name)], required=True) if not s: return r data = { "msg": gettext( "The current user permissions are lower than the permissions you want to modify," " without permission to modify"), "msg_type": "w", "http_status": 401 } user_role = mdb_user.db.role.find_one( {"_id": ObjectId(current_user.role_id)}) # 如果当前用户的权限最高位 小于 要修改成的这个角色权重的最高位,是不可以的 if get_num_digits(user_role["permissions"]) <= get_num_digits(permissions): return data old_role = mdb_user.db.role.find_one({"_id": ObjectId(id)}) # 如果当前用户的权限最高位 小于 要修改角色的权限,也是不可以 if old_role and get_num_digits(old_role["permissions"]) >= get_num_digits( user_role["permissions"]): return data role = { "name": name, "instructions": instructions, 'permissions': permissions, "default": default } data = { 'msg': gettext("Save success"), 'msg_type': "s", "http_status": 201 } if not mdb_user.db.role.find_one({ "name": name, "_id": { "$ne": ObjectId(id) } }): if default: if not mdb_user.db.role.find_one({ "default": { "$in": [1, True] }, "_id": { "$ne": ObjectId(id) } }): r = mdb_user.db.role.update_one({"_id": ObjectId(id)}, {"$set": role}) if not r.modified_count: data = { 'msg': gettext("No changes"), 'msg_type': "w", "http_status": 201 } else: data = { 'msg': gettext("Existing default role"), 'msg_type': "w", "http_status": 403 } else: r = mdb_user.db.role.update_one({"_id": ObjectId(id)}, {"$set": role}) if not r.modified_count: data = { 'msg': gettext("No changes"), 'msg_type': "w", "http_status": 201 } else: data = { 'msg': gettext("Role name already exists"), 'msg_type': "w", "http_status": 403 } return data
def sys_config_edit(): key = request.argget.all('key') project = request.argget.all('project') value = request.argget.all('value') info = request.argget.all('info') version = mdb_sys.db.sys_config.find_one( {"new_version": { "$exists": True }}, {"_id": 0}) s, r = arg_verify(reqargs=[("key", key), ("project", project)], required=True) if not s: return r # 查看是否是必须root用户才能设置的 if project in MUST_ROOT_SETTING: # 权限检查 user_role = mdb_user.db.role.find_one( {"_id": ObjectId(current_user.role_id)}) if get_num_digits(user_role["permissions"]) < get_num_digits( permissions(["ROOT"])): data = { "msg": gettext("Root permission required"), "msg_type": "w", "http_status": 401 } return data old_conf = mdb_sys.db.sys_config.find_one({ "key": key, "project": project, "conf_version": version["new_version"] }) if not old_conf: data = { "msg": gettext("There is no such data"), "msg_type": "e", "http_status": 404 } else: try: if old_conf["type"] == "int" or old_conf["type"] == "binary": value = int(value) elif old_conf["type"] == "float": value = float(value) elif old_conf["type"] == "string": value = str(value) elif old_conf["type"] == "bool": try: value = int(value) if value: value = True else: value = False except: pass if value or (isinstance(value, str) and value.upper() != "FALSE"): value = True else: value = False elif old_conf["type"] == "list": # 如果不是list类型,则转为list类型 if not isinstance(value, list): # "[]"转list value = json.loads(value) if not isinstance(value, list): # "aaa,bbb,ccc"转["aaa", "bbb", "ccc"] value = value.strip(",").split(",") value = [v.strip("\n") for v in value] elif old_conf["type"] == "dict": if not isinstance(value, dict): value = json.loads(value) if not isinstance(value, dict): data = { "msg": gettext( 'The format of the "value" errors, need a "{}" type' ).format(old_conf["type"]), "msg_type": "e", "http_status": 400 } return data elif old_conf["type"] == "tuple": if not isinstance(value, tuple): value = json.loads(value) if not isinstance(value, tuple): data = { "msg": gettext( 'The format of the "value" errors, need a "{}" type' ).format(old_conf["type"]), "msg_type": "e", "http_status": 400 } return data elif old_conf["type"] == "password": value = str(value) else: data = { "msg": gettext('There is no {}').format(old_conf["type"]), "msg_type": "e", "http_status": 400 } return data except Exception as e: data = { "msg": gettext('The format of the "value" errors, need a "{}" type'). format(old_conf["type"]), "msg_type": "e", "http_status": 400 } return data if not info: info = old_conf["info"] conf = {"value": value, "update_time": time.time(), "info": info} # 更新版本 # 解释:只要有一台服务器端重启web并更新配置, 则会把重启时最新版本加入到used_version中 if version["new_version"] in version["used_versions"]: # 如果目前的最新版本号在used_version中, 则本次修改就要生成更新的配置版本 now_version = time_to_utcdate(tformat="%Y_%m_%d_%H_%M_%S") old_version = mdb_sys.db.sys_config.find( { "project": { "$exists": True }, "conf_version": version["new_version"] }, {"_id": 0}) # 生成最新版本配置 for v in old_version: v["conf_version"] = now_version mdb_sys.db.sys_config.insert_one(v) # 更新当前使用的最新版本号 mdb_sys.db.sys_config.update_one( {"new_version": { "$exists": True }}, {"$set": { "new_version": now_version }}) # 删除多余的配置版本 ver_cnt = len(version["used_versions"]) if ver_cnt >= 15: rm_vers = version["used_versions"][0:ver_cnt - 15] mdb_sys.db.sys_config.update_one( {"new_version": { "$exists": True }}, { "$set": { "used_versions": version["used_versions"][ver_cnt - 15:] } }) mdb_sys.db.sys_config.delete_many( {"version": { "$in": rm_vers }}) else: # 否则, 本次修改暂不生成新配置版本 now_version = version["new_version"] # 更新修改数据 mdb_sys.db.sys_config.update_one( { "project": project, "key": key, "conf_version": now_version }, {"$set": conf}, upsert=True) # 删除缓存,达到更新缓存 cache.delete(CONFIG_CACHE_KEY) data = { "msg": gettext("Modify the success"), "msg_type": "s", "http_status": 201 } return data