Skip to content

增加展示数据库和用户信息 #1398

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
2 changes: 1 addition & 1 deletion archery/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,4 +311,4 @@

PKEY_ROOT = os.path.join(MEDIA_ROOT, 'keys')
if not os.path.exists(PKEY_ROOT):
os.mkdir(PKEY_ROOT)
os.mkdir(PKEY_ROOT)
35 changes: 32 additions & 3 deletions sql/instance_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
def users(request):
"""获取实例用户列表"""
instance_id = request.POST.get('instance_id')
saved = True if request.POST.get('saved') == 'true' else False # 平台是否保存
saved = request.POST.get('saved')

if not instance_id:
return JsonResponse({'status': 0, 'msg': '', 'data': []})
Expand All @@ -28,7 +28,7 @@ def users(request):

# 获取已录入用户
cnf_users = dict()
for user in InstanceAccount.objects.filter(instance=instance).values('id', 'user', 'host', 'remark'):
for user in InstanceAccount.objects.filter(instance=instance).values('id', 'user', 'host' , 'password', 'remark'):
user['saved'] = True
cnf_users[f"`{user['user']}`@`{user['host']}`"] = user
# 获取所有用户
Expand Down Expand Up @@ -61,7 +61,12 @@ def users(request):
rows.append(row)
# 过滤参数
if saved:
rows = [row for row in rows if row['saved']]
#request.POST.get传来的是str,list中保存的是布尔
if saved == 'True':
saved = bool(saved)
else:
saved = bool("")
rows = [row for row in rows if row['saved'] == saved]

result = {'status': 0, 'msg': 'ok', 'rows': rows}
else:
Expand All @@ -72,6 +77,30 @@ def users(request):
return HttpResponse(json.dumps(result, cls=ExtendJSONEncoder, bigint_as_string=True),
content_type='application/json')

@permission_required('sql.instance_account_manage', raise_exception=True)
def requ_password(request):
"""获取数据库用户密码"""
instance_id = request.POST.get('instance_id', 0)
user = request.POST.get('user')
host = request.POST.get('host')

if not instance_id:
return JsonResponse({'status': 0, 'msg': '', 'data': []})
try:
instance = user_instances(request.user, db_type=['mysql']).get(id=instance_id)
except Instance.DoesNotExist:
return JsonResponse({'status': 1, 'msg': '你所在组未关联该实例', 'data': []})

# 获取已录入用户

cnf_users = dict()
for user_password in InstanceAccount.objects.filter(instance=instance,user = user, host = host).values('id', 'user','host','password' ):
cnf_users = user_password

result = {'status': 0, 'msg': 'ok', 'rows': cnf_users}

return HttpResponse(json.dumps(result, cls=ExtendJSONEncoder, bigint_as_string=True),
content_type='application/json')

@permission_required('sql.instance_account_manage', raise_exception=True)
def create(request):
Expand Down
20 changes: 13 additions & 7 deletions sql/instance_database.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: UTF-8 -*-
"""
"""
@author: hhyo
@license: Apache Licence
@file: instance_database.py
Expand All @@ -24,7 +24,7 @@
def databases(request):
"""获取实例数据库列表"""
instance_id = request.POST.get('instance_id')
saved = True if request.POST.get('saved') == 'true' else False # 平台是否保存
saved = request.POST.get('saved')

if not instance_id:
return JsonResponse({'status': 0, 'msg': '', 'data': []})
Expand All @@ -37,12 +37,12 @@ def databases(request):
# 获取已录入数据库
cnf_dbs = dict()
for db in InstanceDatabase.objects.filter(
instance=instance).values('id', 'db_name', 'owner', 'owner_display', 'remark'):
instance=instance).values('id', 'db_name', 'owner', 'owner_display', 'remark','in_use'):
db['saved'] = True
cnf_dbs[f"{db['db_name']}"] = db

# 获取所有数据库
sql_get_db = """SELECT SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME
sql_get_db = """SELECT SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('information_schema', 'performance_schema', 'mysql', 'test', 'sys');"""
query_engine = get_engine(instance=instance)
Expand Down Expand Up @@ -71,7 +71,11 @@ def databases(request):
rows.append(row)
# 过滤参数
if saved:
rows = [row for row in rows if row['saved']]
if saved == 'True':
saved = bool(saved)
else:
saved = bool("")
rows = [row for row in rows if row['saved'] == saved ]

result = {'status': 0, 'msg': 'ok', 'rows': rows}
else:
Expand All @@ -90,6 +94,7 @@ def create(request):
db_name = request.POST.get('db_name')
owner = request.POST.get('owner', '')
remark = request.POST.get('remark', '')
in_use = request.POST.get('in_use', '')

if not all([db_name]):
return JsonResponse({'status': 1, 'msg': '参数不完整,请确认后提交', 'data': []})
Expand All @@ -114,7 +119,7 @@ def create(request):
# 保存到数据库
else:
InstanceDatabase.objects.create(
instance=instance, db_name=db_name, owner=owner, owner_display=owner_display, remark=remark)
instance=instance, db_name=db_name, owner=owner, owner_display=owner_display, remark=remark,in_use = in_use )
# 清空实例资源缓存
r = get_redis_connection("default")
for key in r.scan_iter(match='*insRes*', count=2000):
Expand All @@ -129,6 +134,7 @@ def edit(request):
db_name = request.POST.get('db_name')
owner = request.POST.get('owner', '')
remark = request.POST.get('remark', '')
in_use = request.POST.get('in_use', '')

if not all([db_name]):
return JsonResponse({'status': 1, 'msg': '参数不完整,请确认后提交', 'data': []})
Expand All @@ -147,5 +153,5 @@ def edit(request):
InstanceDatabase.objects.update_or_create(
instance=instance,
db_name=db_name,
defaults={"owner": owner, "owner_display": owner_display, "remark": remark})
defaults={"owner": owner, "owner_display": owner_display, "remark": remark,"in_use" : in_use})
return JsonResponse({'status': 0, 'msg': '', 'data': []})
1 change: 1 addition & 0 deletions sql/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ class InstanceDatabase(models.Model):
owner = models.CharField('负责人', max_length=50, default='', blank=True)
owner_display = models.CharField('负责人中文名', max_length=50, default='', blank=True)
remark = models.CharField('备注', max_length=255, default='', blank=True)
in_use = models.CharField('在用状态', max_length=1, default='', blank=True)
sys_time = models.DateTimeField('系统修改时间', auto_now=True)

class Meta:
Expand Down
34 changes: 32 additions & 2 deletions sql/templates/database.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
<select id="saved" class="form-control selectpicker"
title="全部">
<option value="" selected="selected">全部</option>
<option value="true">已录入</option>
<option value="True">已录入</option>
<option value="False">未录入</option>
</select>
</div>
<div class="form-group ">
Expand Down Expand Up @@ -75,7 +76,17 @@ <h4 class="modal-title">创建数据库</h4>
placeholder="请输入备注">
</div>
</div>
<div class="form-group row">
<label for="in_use" class="col-sm-3 col-form-label">备注</label>
<div class="col-sm-9">
<select id="in_use" class="form-control selectpicker"
title="在用状态">
<option value="Y" selected="selected">在用</option>
<option value="N">停用</option>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="btnCreateDb" onclick="create_database()">创建
Expand Down Expand Up @@ -126,6 +137,17 @@ <h4 class="modal-title">编辑/录入数据库信息</h4>
placeholder="请输入备注">
</div>
</div>
<div class="form-group row">
<label for="edit_in_use" class="col-sm-3 col-form-label">备注</label>
<div class="col-sm-9">
<select id="edit_in_use" class="form-control selectpicker"
title="在用状态">
<option value="Y" selected="selected">在用</option>
<option value="N">停用</option>
</select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
Expand Down Expand Up @@ -217,6 +239,10 @@ <h4 class="modal-title">编辑/录入数据库信息</h4>
title: '备注',
field: 'remark'
}, {
},{
title: '在用状态',
field: 'in_use'
},{
title: '操作',
field: '',
formatter: function (value, row, index) {
Expand Down Expand Up @@ -270,7 +296,8 @@ <h4 class="modal-title">编辑/录入数据库信息</h4>
instance_id: $("#instance").val(),
db_name: $("#db_name").val(),
owner: $("#owner").val(),
remark: $("#remark").val()
remark: $("#remark").val(),
in_use: $("#in_use").val()
},
complete: function () {
},
Expand All @@ -297,10 +324,12 @@ <h4 class="modal-title">编辑/录入数据库信息</h4>
let row_data = $('#database-list').bootstrapTable('getRowByUniqueId', db_name);
let owner = row_data['owner'];
let remark = row_data['remark'];
let in_use = row_data['in_use'];
$("#edit_db_name").val(db_name);
$("#edit_owner").val(owner);
$("#edit_owner").selectpicker('refresh');
$("#edit_remark").val(remark);
$("#in_use").val(in_use);
$('#modal-edit-database').modal('show');

//变更用户权限
Expand All @@ -314,6 +343,7 @@ <h4 class="modal-title">编辑/录入数据库信息</h4>
db_name: db_name,
owner: $("#edit_owner").val(),
remark: $("#edit_remark").val(),
in_use: $("#edit_in_use").val(),
},
complete: function () {
},
Expand Down
75 changes: 73 additions & 2 deletions sql/templates/instanceaccount.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
<select id="saved" class="form-control selectpicker"
title="全部">
<option value="" selected="selected">全部</option>
<option value="true">已录入</option>
<option value="True">已录入</option>
<option value="False">未录入</option>
</select>
</div>
<div class="form-group ">
Expand Down Expand Up @@ -985,6 +986,31 @@ <h4 class="modal-title">删除账号
</div>
</div>
</div>

<!-- 显示密码模态框 -->
<div class="modal fade" id="show-pwd" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title">查看密码
实例: <span id="show-instance" style="color: red"></span>
账号: <span id="show-user" style="color: red"></span></h4>
</div>
<div>
<h4 class="modal-title">
密码: <span id="show-password" style="color: red"></span></h4>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-danger" id="lockBtn">确定</button>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
{% block js %}
{% load static %}
Expand Down Expand Up @@ -1161,13 +1187,20 @@ <h4 class="modal-title">删除账号
let btn_modify_grants = "<button class=\"btn btn-primary btn-xs\" user_host=\"" + row.user_host + "\" onclick=\"show_grants_modal(this)" + "\">授权</button>\n";
let btn_reset_passwd = "<button class=\"btn btn-warning btn-xs\" user_host=\"" + row.user_host + "\" onclick=\"show_reset_modal(this)" + "\">改密</button>\n";
let btn_del_account = "<button class=\"btn btn-danger btn-xs\" user_host=\"" + row.user_host + "\" onclick=\"show_delete_modal(this)" + "\">删除</button>\n";

let btn_lock_account = "";
if (row.is_locked === 'N') {
btn_lock_account = "<button class=\"btn btn-danger btn-xs\" user_host=\"" + row.user_host + "\" is_locked=\"" + row.is_locked + "\" onclick=\"show_lock_modal(this)" + "\">锁定</button>\n";
} else if (row.is_locked === 'Y') {
btn_lock_account = "<button class=\"btn btn-success btn-xs\" user_host=\"" + row.user_host + "\" is_locked=\"" + row.is_locked + "\" onclick=\"show_lock_modal(this)" + "\">解锁</button>\n";
}
return btn_edit + btn_modify_grants + btn_reset_passwd + btn_lock_account + btn_del_account

if ($("#saved").val() == 'True') {
let btn_show_password = "<button class=\"btn btn-danger btn-xs\" user_host=\"" + row.user_host + "\" onclick=\"show_password_modal(this)" + "\">显密</button>\n";
return btn_edit + btn_modify_grants + btn_reset_passwd + btn_lock_account + btn_del_account + btn_show_password
}else{
return btn_edit + btn_modify_grants + btn_reset_passwd + btn_lock_account + btn_del_account
}
}
}],
onLoadSuccess: function (data) {
Expand All @@ -1190,6 +1223,7 @@ <h4 class="modal-title">删除账号

}


//获取实例数据库
function db_list() {
$.ajax({
Expand Down Expand Up @@ -1507,6 +1541,7 @@ <h4 class="modal-title">删除账号
let row_data = $('#user-list').bootstrapTable('getRowByUniqueId', user_host);
let user = row_data['user'];
let host = row_data['host'];
let password = row_data['password'];
$("#reset-user").text(user_host);
$("#reset-pwd").modal('show');

Expand Down Expand Up @@ -1542,6 +1577,42 @@ <h4 class="modal-title">删除账号
});
}

//显示密码
function show_password_modal (obj) {
let user_host = $(obj).attr("user_host");
let row_data = $('#user-list').bootstrapTable('getRowByUniqueId', user_host);

$.ajax({
type: "post",
url: "/instance/user/requ_password",
dataType: "json",
data: {
instance_id: $("#instance").val(),
user: row_data['user'],
host: row_data['host']
},
complete: function () {
},
success: function (data) {
//console.log(data);
if (data.status === 0) {
let result = data.rows;
let password = result.password;
//console.log(result);
$("#show-user").text(user_host);
$("#show-password").text(password);
$("#show-pwd").modal('show');
} else {
alert(data.msg);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});

}

//锁定or解锁账号
function show_lock_modal(obj) {
let user_host = $(obj).attr("user_host");
Expand Down
1 change: 1 addition & 0 deletions sql/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
path('instance/list/', instance.lists),

path('instance/user/list', instance_account.users),
path('instance/user/requ_password', instance_account.requ_password),
path('instance/user/create/', instance_account.create),
path('instance/user/edit/', instance_account.edit),
path('instance/user/grant/', instance_account.grant),
Expand Down
3 changes: 3 additions & 0 deletions src/init_sql/v1.8.3.sql
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@ insert IGNORE INTO auth_permission (name, content_type_id, codename) VALUES
-- 实例配置表新增mode字段,用于redis实例;为历史数据设置默认值
alter table sql_instance add column `mode` varchar(10) DEFAULT '' after `db_type`;
update sql_instance set mode='standalone' where db_type='redis';

-- 已录入数据库新增in_use字段,用于标识数据库还是否在用,Y是在用,N是停用
alter table instance_database add in_use varchar(1) COMMENT '在用状态';