pull/105/head
Apex Liu 2018-05-16 13:20:40 +08:00
parent b6284d6188
commit ccad74bbd2
5 changed files with 95 additions and 9 deletions

View File

@ -3,6 +3,9 @@
$app.on_init = function (cb_stack) {
$app.dom = {
// assist_ver: $('#tp-assist-ver'),
btn_sel_group: $('#btn-sel-group button'),
group_list_for_sel: $('#btn-sel-group ul'),
btn_refresh_host: $('#btn-refresh-host'),
btn_add_host: $('#btn-add-host'),
chkbox_host_select_all: $('#table-host-select-all'),
@ -19,6 +22,27 @@ $app.on_init = function (cb_stack) {
upload_file_message: $('#upload-file-message')
};
console.log($app.options.host_groups);
// var i = 0;
// var html = [];
// html.push('<optioin value="0">所有分组</optioin>');
// html.push('<optioin value="-1">----------</optioin>');
// for(i = 0; i < $app.options.host_groups.length; ++i) {
// html.push('<optioin value="'+$app.options.host_groups[i].id+'">'+$app.options.host_groups[i].name+'</optioin>');
// }
// $app.dom.sel_host_group.ap
var html = [];
$.each($app.options.host_groups, function (i, item) {
html.push('<li><a href="javascript:;" data-tp-selector="' + item.id + '" data-name="' + item.name + '"><i class="fa fa-caret-right fa-fw"></i> ' + item.name + '</a></li>');
});
$app.dom.group_list_for_sel.append($(html.join('')));
$app.dom.group_list_for_sel.find('a[data-tp-selector]').click(function () {
var obj = $(this);
//$app.set_selected_to_role(parseInt(obj.attr('data-tp-selector')), obj.attr('data-name'));
});
// $tp.assist_checked = function () {
// console.log("---------");
// if ($tp.assist.running) {

View File

@ -6,11 +6,16 @@
<%inherit file="../page_base.mako"/>
<%block name="extend_js_file">
## <script type="text/javascript" src="${ static_url('js/tp-assist.js') }"></script>
<script type="text/javascript" src="${ static_url('js/asset/host-list.js') }"></script>
<script type="text/javascript" src="${ static_url('plugins/jquery/ajaxfileupload.js') }"></script>
</%block>
<%block name="embed_js">
<script type="text/javascript">
$app.add_options(${page_param});
</script>
</%block>
<%block name="embed_css">
<style>
</style>
@ -29,9 +34,20 @@
<!-- begin box -->
<div class="box">
<p>filter goes here...</p>
<div class="btn-group dropdown" id="btn-sel-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-edit fa-fw"></i> 所有分组 <i class="fa fa-caret-right"></i></button>
<ul class="dropdown-menu dropdown-menu-sm"></ul>
</div>
<hr/>
<div class="table-prefix-area">
<div class="table-extend-cell">
<span class="table-name"><i class="fa fa-list fa-fw"></i> 主机列表</span>
<button id="btn-refresh-host" class="btn btn-sm btn-default"><i class="fa fa-redo fa-fw"></i> 刷新列表</button>
</div>
<div class="table-extend-cell table-extend-cell-right group-actions">

View File

@ -71,7 +71,7 @@
<div class="table-extend-cell group-actions">
<div class="btn-group" role="group">
<div class="btn-group">
<div class="btn-group dropup" id="btn-set-role" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-edit fa-fw"></i> 设置角色 <i class="fa fa-caret-right"></i></button>
<ul class="dropdown-menu dropdown-menu-sm"></ul>

View File

@ -24,7 +24,13 @@ class HostListHandler(TPBaseHandler):
ret = self.check_privilege(TP_PRIVILEGE_ASSET_CREATE | TP_PRIVILEGE_ASSET_DELETE | TP_PRIVILEGE_ASSET_GROUP)
if ret != TPE_OK:
return
self.render('asset/host-list.mako')
err, groups = group.get_host_groups_for_user(self.current_user['id'], self.current_user['privilege'])
param = {
'host_groups': groups
}
self.render('asset/host-list.mako', page_param=json.dumps(param))
class DoGetHostsHandler(TPBaseJsonHandler):

View File

@ -361,9 +361,49 @@ def get_groups(sql_filter, sql_order, sql_limit, sql_restrict, sql_exclude):
return err, s.total_count, s.page_index, s.recorder
def get_host_groups_for_user(handler):
# 获取当前用户能查看的主机分组列表
pass
def get_host_groups_for_user(user_id, user_privilege):
# get all host-groups for current logged in user.
db = get_db()
# step 0. return all host-groups if user have all host-group access privilege
if (user_privilege & (TP_PRIVILEGE_ASSET_CREATE | TP_PRIVILEGE_ASSET_DELETE | TP_PRIVILEGE_ASSET_GROUP)) != 0:
s = SQL(get_db())
s.select_from('group', ['id', 'name'], alt_name='g')
s.where('g.type={}'.format(TP_GROUP_HOST))
s.order_by('g.name')
err = s.query()
return err, s.recorder
# step 1. get all hosts which could be access by this user.
sql = 'SELECT `h_id` FROM `{dbtp}ops_map` WHERE `u_id`={dbph} GROUP BY `h_id`;'.format(dbtp=db.table_prefix, dbph=db.place_holder)
db_ret = db.query(sql, (user_id, ))
if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS, None
hosts = []
for db_item in db_ret:
hosts.append(str(db_item[0]))
# step 2. get groups which include those hosts.
sql = 'SELECT `gid` FROM `{dbtp}group_map` WHERE (`type`={dbph} AND `mid` IN ({dbph})) GROUP BY `gid`;'.format(dbtp=db.table_prefix, dbph=db.place_holder, hosts=','.join(hosts))
db_ret = db.query(sql, (TP_GROUP_HOST, ','.join(hosts)))
if db_ret is None or len(db_ret) == 0:
return TPE_NOT_EXISTS, None
groups = []
for db_item in db_ret:
groups.append(str(db_item[0]))
# step 3. get those groups id and name.
s = SQL(get_db())
s.select_from('group', ['id', 'name'], alt_name='g')
s.where('g.id IN ({})'.format(','.join(groups)))
s.order_by('g.name')
err = s.query()
return err, s.recorder
def get_acc_groups_for_user(handler):