mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-18 23:45:52 +08:00
update
This commit is contained in:
+197
-1
@@ -736,6 +736,195 @@ def getDbInfo():
|
||||
|
||||
return mw.returnJson(True,'ok', result)
|
||||
|
||||
def toDbBase(find):
|
||||
client = mongdbClient()
|
||||
db_admin = client.admin
|
||||
data_name = find['name']
|
||||
db = client[data_name]
|
||||
|
||||
db.chat.insert_one({})
|
||||
user_roles = [{'role': 'dbOwner', 'db': data_name}, {'role': 'userAdmin', 'db': data_name}]
|
||||
try:
|
||||
db_admin.command("createUser", find['username'], pwd=find['password'], roles=user_roles)
|
||||
except Exception as e:
|
||||
db_admin.command("updateUser", find['username'], pwd=find['password'], roles=user_roles)
|
||||
return 1
|
||||
|
||||
def syncToDatabases():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['type', 'ids'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
stype = int(args['type'])
|
||||
sqlite_db = pSqliteDb('databases')
|
||||
n = 0
|
||||
|
||||
if stype == 0:
|
||||
data = sqlite_db.field('id,name,username,password,accept').select()
|
||||
for value in data:
|
||||
result = toDbBase(value)
|
||||
if result == 1:
|
||||
n += 1
|
||||
else:
|
||||
data = json.loads(args['ids'])
|
||||
for value in data:
|
||||
find = sqlite_db.where("id=?", (value,)).field(
|
||||
'id,name,username,password,accept').find()
|
||||
# print find
|
||||
result = toDbBase(find)
|
||||
if result == 1:
|
||||
n += 1
|
||||
msg = mw.getInfo('本次共同步了{1}个数据库!', (str(n),))
|
||||
return mw.returnJson(True, msg)
|
||||
|
||||
|
||||
def getAllRole():
|
||||
mongo_role = {
|
||||
# 数据库用户角色
|
||||
"read": "读取数据(read)",
|
||||
"readWrite": "读取和写入数据(readWrite)",
|
||||
# 数据库管理角色
|
||||
# "dbAdmin": "数据库管理员",
|
||||
"dbOwner": "数据库所有者(dbOwner)",
|
||||
"userAdmin": "用户管理员(userAdmin)",
|
||||
# 集群管理角色
|
||||
# "clusterAdmin": "集群管理员",
|
||||
# "clusterManager": "集群管理器",
|
||||
# "clusterMonitor": "集群监视器",
|
||||
# "hostManager": "主机管理员",
|
||||
# 备份和恢复角色
|
||||
# "backup": "备份数据",
|
||||
# "restore": "还原数据",
|
||||
# 所有数据库角色
|
||||
# "readAnyDatabase": "任意数据库读取",
|
||||
# "readWriteAnyDatabase": "任意数据库读取和写入",
|
||||
# "userAdminAnyDatabase": "任意数据库用户管理员",
|
||||
# "dbAdminAnyDatabase": "任意数据库管理员",
|
||||
# 超级用户角色
|
||||
# "root": "超级管理员",
|
||||
# 内部角色
|
||||
# "__queryableBackup": "可查询备份",
|
||||
# "__system": "系统角色",
|
||||
# "enableSharding": "启用分片",
|
||||
}
|
||||
|
||||
client = mongdbClient()
|
||||
db = client.admin
|
||||
|
||||
# 获取所有角色
|
||||
role_data = db.command('rolesInfo', showBuiltinRoles=True)
|
||||
result = []
|
||||
for role in role_data["roles"]:
|
||||
if mongo_role.get(role["role"]) is not None:
|
||||
role["name"] = mongo_role.get(role["role"])
|
||||
result.append(role)
|
||||
return mw.returnJson(True, 'ok', result)
|
||||
|
||||
def getDbAccess():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['username'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
client = mongdbClient()
|
||||
db = client.admin
|
||||
username = args['username']
|
||||
|
||||
mongo_role = {
|
||||
# 数据库用户角色
|
||||
"read": "读取数据(read)",
|
||||
"readWrite": "读取和写入数据(readWrite)",
|
||||
# 数据库管理角色
|
||||
# "dbAdmin": "数据库管理员",
|
||||
"dbOwner": "数据库所有者(dbOwner)",
|
||||
"userAdmin": "用户管理员(userAdmin)",
|
||||
# 集群管理角色
|
||||
# "clusterAdmin": "集群管理员",
|
||||
# "clusterManager": "集群管理器",
|
||||
# "clusterMonitor": "集群监视器",
|
||||
# "hostManager": "主机管理员",
|
||||
# 备份和恢复角色
|
||||
# "backup": "备份数据",
|
||||
# "restore": "还原数据",
|
||||
# 所有数据库角色
|
||||
# "readAnyDatabase": "任意数据库读取",
|
||||
# "readWriteAnyDatabase": "任意数据库读取和写入",
|
||||
# "userAdminAnyDatabase": "任意数据库用户管理员",
|
||||
# "dbAdminAnyDatabase": "任意数据库管理员",
|
||||
# 超级用户角色
|
||||
# "root": "超级管理员",
|
||||
# 内部角色
|
||||
# "__queryableBackup": "可查询备份",
|
||||
# "__system": "系统角色",
|
||||
# "enableSharding": "启用分片",
|
||||
}
|
||||
|
||||
role_data = db.command('rolesInfo', showBuiltinRoles=True)
|
||||
all_role_list = []
|
||||
for role in role_data["roles"]:
|
||||
if mongo_role.get(role["role"]) is not None:
|
||||
role["name"] = mongo_role.get(role["role"])
|
||||
all_role_list.append(role)
|
||||
|
||||
result = {
|
||||
"user": username,
|
||||
"db": username,
|
||||
"roles": [],
|
||||
"all_roles":all_role_list,
|
||||
}
|
||||
|
||||
user_data = db.command('usersInfo', username)
|
||||
if user_data:
|
||||
if len(user_data["users"]) != 0:
|
||||
user = user_data["users"][0]
|
||||
result["user"] = user.get("user", username)
|
||||
result["db"] = user.get("db", username)
|
||||
result["roles"] = user.get("roles", [])
|
||||
|
||||
return mw.returnJson(True, 'ok', result)
|
||||
|
||||
def setDbAccess():
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['username', 'select','name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
username = args['username']
|
||||
select = args['select']
|
||||
name = args['name']
|
||||
|
||||
mg_pass = pSqliteDb('config').where('id=?', (1,)).getField('mg_root')
|
||||
|
||||
# user_rules = [
|
||||
# {'role': 'root', 'db': 'admin'},
|
||||
# {'role': 'clusterAdmin', 'db': 'admin'},
|
||||
# {'role': 'readAnyDatabase', 'db': 'admin'},
|
||||
# {'role': 'readWriteAnyDatabase', 'db': 'admin'},
|
||||
# {'role': 'userAdminAnyDatabase', 'db': 'admin'},
|
||||
# {'role': 'dbAdminAnyDatabase', 'db': 'admin'},
|
||||
# {'role': 'userAdmin', 'db': 'admin'},
|
||||
# {'role': 'dbAdmin', 'db': 'admin'}
|
||||
# ]
|
||||
|
||||
user_roles = []
|
||||
select_role = select.split(',')
|
||||
for role in select_role:
|
||||
t = {}
|
||||
t['role'] = role
|
||||
t['db'] = name
|
||||
user_roles.append(t)
|
||||
|
||||
client = mongdbClient()
|
||||
db = client.admin
|
||||
|
||||
try:
|
||||
db.command("updateUser", username, pwd=mg_pass, roles=user_roles)
|
||||
except Exception as e:
|
||||
db.command('dropUser',username)
|
||||
db.command("createUser", username, pwd=mg_pass, roles=user_roles)
|
||||
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
def testData():
|
||||
'''
|
||||
cd /www/server/mdserver-web && source bin/activate && python3 /www/server/mdserver-web/plugins/mongodb/index.py test_data
|
||||
@@ -754,7 +943,6 @@ def testData():
|
||||
print(x)
|
||||
|
||||
|
||||
|
||||
def test():
|
||||
initUserRoot()
|
||||
'''
|
||||
@@ -930,10 +1118,18 @@ if __name__ == "__main__":
|
||||
print(setUserPwd())
|
||||
elif func == 'sync_get_databases':
|
||||
print(syncGetDatabases())
|
||||
elif func == 'sync_to_databases':
|
||||
print(syncToDatabases())
|
||||
elif func == 'set_db_ps':
|
||||
print(setDbPs())
|
||||
elif func == 'get_db_info':
|
||||
print(getDbInfo())
|
||||
elif func == 'get_all_role':
|
||||
print(getAllRole())
|
||||
elif func == 'get_db_access':
|
||||
print(getDbAccess())
|
||||
elif func == 'set_db_access':
|
||||
print(setDbAccess())
|
||||
elif func == 'run_log':
|
||||
print(runLog())
|
||||
elif func == 'test':
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"sort": 7,
|
||||
"ps": "一个高性能的NOSQL数据库",
|
||||
"ps": "一个高性能的NOSQL数据库【社区版】",
|
||||
"name": "mongodb",
|
||||
"title": "Mongodb",
|
||||
"shell": "install.sh",
|
||||
|
||||
+131
-14
@@ -26,6 +26,33 @@ function mgPost(method, version, args,callback){
|
||||
},'json');
|
||||
}
|
||||
|
||||
|
||||
function mgPostN(method, version, args,callback){
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'mongodb';
|
||||
req_data['func'] = method;
|
||||
req_data['version'] = version;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(toArrayObject(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/run', req_data, function(data) {
|
||||
if (!data.status){
|
||||
//错误展示10S
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function mgAsyncPost(method,args){
|
||||
var _args = null;
|
||||
if (typeof(args) == 'string'){
|
||||
@@ -211,11 +238,11 @@ function dbList(page, search){
|
||||
|
||||
_data['page'] = page;
|
||||
_data['page_size'] = 10;
|
||||
console.log(_data);
|
||||
// console.log(_data);
|
||||
mgPost('get_db_list', '',_data, function(data){
|
||||
console.log(data);
|
||||
// console.log(data);
|
||||
var rdata = $.parseJSON(data.data);
|
||||
console.log(rdata);
|
||||
// console.log(rdata);
|
||||
var list = '';
|
||||
for(i in rdata.data){
|
||||
list += '<tr>';
|
||||
@@ -235,7 +262,7 @@ function dbList(page, search){
|
||||
list += '<a href="javascript:;" class="btlink" class="btlink" onclick="setBackup(\''+rdata.data[i]['name']+'\',this)" title="数据库备份">'+(rdata.data[i]['is_backup']?'备份':'未备份') +'</a> | ';
|
||||
|
||||
list += '<a href="javascript:;" class="btlink" onclick="repTools(\''+rdata.data[i]['name']+'\')" title="MySQL优化修复工具">工具</a> | ' +
|
||||
'<a href="javascript:;" class="btlink" onclick="setDbAccess(\''+rdata.data[i]['username']+'\')" title="设置数据库权限">权限</a> | ' +
|
||||
'<a href="javascript:;" class="btlink" onclick="setDbAccess(\''+rdata.data[i]['username']+'\',\''+rdata.data[i]['name']+'\')" title="设置数据库权限">权限</a> | ' +
|
||||
'<a href="javascript:;" class="btlink" onclick="setDbPass('+rdata.data[i]['id']+',\''+ rdata.data[i]['username'] +'\',\'' + rdata.data[i]['password'] + '\')">改密</a> | ' +
|
||||
'<a href="javascript:;" class="btlink" onclick="delDb(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\')" title="删除数据库">删除</a>' +
|
||||
'</td>';
|
||||
@@ -539,8 +566,7 @@ function repTools(db_name, res){
|
||||
mgPost('get_db_info', '', {name:db_name}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
var rdata = rdata.data;
|
||||
|
||||
console.log(rdata.collection_list);
|
||||
// console.log(rdata.collection_list);
|
||||
var tbody = '';
|
||||
for (var i = 0; i < rdata.collection_list.length; i++) {
|
||||
tbody += '<tr>\
|
||||
@@ -554,14 +580,6 @@ function repTools(db_name, res){
|
||||
</tr> '
|
||||
}
|
||||
|
||||
if (res) {
|
||||
$(".gztr").html(tbody);
|
||||
$("#db_tools").html('');
|
||||
$("input[type='checkbox']").attr("checked", false);
|
||||
$(".tools_size").html('大小:' + rdata.data_size);
|
||||
return;
|
||||
}
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: "MongoDB工具箱【" + db_name + "】",
|
||||
@@ -600,3 +618,102 @@ function repTools(db_name, res){
|
||||
tableFixed('database_fix');
|
||||
});
|
||||
}
|
||||
|
||||
function syncToDatabase(type){
|
||||
var data = [];
|
||||
$('input[type="checkbox"].check:checked').each(function () {
|
||||
if (!isNaN($(this).val())) data.push($(this).val());
|
||||
});
|
||||
var postData = 'type='+type+'&ids='+JSON.stringify(data);
|
||||
mgPost('sync_to_databases', '',postData, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// console.log(rdata);
|
||||
showMsg(rdata.msg,function(){
|
||||
dbList();
|
||||
},{ icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
function setDbAccess(username,name){
|
||||
mgPost('get_db_access','','username='+username, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg,{icon:2,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
var db_roles = rdata.data.roles;
|
||||
var all_roles = rdata.data.all_roles;
|
||||
// console.log(all_roles);
|
||||
var role_list;
|
||||
var index = layer.open({
|
||||
type: 1,
|
||||
area: '500px',
|
||||
title: '设置数据库权限',
|
||||
closeBtn: 1,
|
||||
shift: 5,
|
||||
btn:["提交","取消"],
|
||||
shadeClose: true,
|
||||
content: "<form class='bt-form pd20' id='set_db_access'>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>访问权限</span>\
|
||||
<div class='info-r'>\
|
||||
<div id='role_list'></div>\
|
||||
</div>\
|
||||
</div>\
|
||||
</form>",
|
||||
success:function(layers, index){
|
||||
document.getElementById('layui-layer' + index).getElementsByClassName('layui-layer-content')[0].style.overflow = 'unset';
|
||||
|
||||
var role_data = [];
|
||||
for (var i = 0; i < db_roles.length; i++) {
|
||||
var t = {};
|
||||
t['name'] = db_roles[i]['role'];
|
||||
t['value'] = db_roles[i]['role'];
|
||||
role_data.push(t);
|
||||
}
|
||||
|
||||
role_list = xmSelect.render({
|
||||
el: '#role_list',
|
||||
language: 'zn',
|
||||
toolbar: {show: true,},
|
||||
paging: false,
|
||||
data: role_data,
|
||||
});
|
||||
|
||||
var pdata = [];
|
||||
for (var i = 0; i < all_roles.length; i++) {
|
||||
var tval = all_roles[i];
|
||||
var isSelected = false;
|
||||
for (var db_i = 0; db_i < db_roles.length; db_i++) {
|
||||
var db_name = db_roles[db_i]['role'];
|
||||
if (db_name == tval['role']){
|
||||
isSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
var t = {name:tval['name'],value:tval['role']};
|
||||
if (isSelected){
|
||||
t = {name:tval['name'],value:tval['role'], selected: true};
|
||||
}
|
||||
pdata.push(t);
|
||||
}
|
||||
role_list.update({data:pdata});
|
||||
},
|
||||
yes:function(index){
|
||||
var data = $("#set_db_access").serialize();
|
||||
data = decodeURIComponent(data);
|
||||
var dataObj = toArrayObject(data);
|
||||
dataObj['username'] = username;
|
||||
dataObj['name'] = name;
|
||||
mgPost('set_db_access', '',dataObj, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
layer.close(index);
|
||||
dbList();
|
||||
},{icon: rdata.status ? 1 : 2});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user