Commit 175f2702 authored by liuzheng712's avatar liuzheng712

Merge branch 'dev' of https://git.coding.net/jumpserver/jumpserver into NormalUserPageLZ

parents c89d43d2 742e56fc
This diff is collapsed.
This diff is collapsed.
...@@ -4,6 +4,8 @@ import xlsxwriter ...@@ -4,6 +4,8 @@ import xlsxwriter
from django.db.models import AutoField from django.db.models import AutoField
from jumpserver.api import * from jumpserver.api import *
from jasset.models import ASSET_STATUS, ASSET_TYPE, ASSET_ENV, IDC, AssetRecord from jasset.models import ASSET_STATUS, ASSET_TYPE, ASSET_ENV, IDC, AssetRecord
from jperm.ansible_api import MyRunner
from jperm.perm_api import gen_resource
def group_add_asset(group, asset_id=None, asset_ip=None): def group_add_asset(group, asset_id=None, asset_ip=None):
...@@ -359,7 +361,6 @@ def ansible_record(asset, ansible_dic, username): ...@@ -359,7 +361,6 @@ def ansible_record(asset, ansible_dic, username):
old = asset_dic.get(field) old = asset_dic.get(field)
new = ansible_dic.get(field) new = ansible_dic.get(field)
if unicode(old) != unicode(new): if unicode(old) != unicode(new):
print old, new, type(old), type(new)
setattr(asset, field, value) setattr(asset, field, value)
asset.save() asset.save()
alert_dic[field] = [old, new] alert_dic[field] = [old, new]
...@@ -384,16 +385,17 @@ def excel_to_db(excel_file): ...@@ -384,16 +385,17 @@ def excel_to_db(excel_file):
row = table.row_values(row_num) row = table.row_values(row_num)
if row: if row:
ip, port, hostname, use_default_auth, username, password, group = row ip, port, hostname, use_default_auth, username, password, group = row
use_default_auth = 1 if use_default_auth == u'默认' else 0
if get_object(Asset, hostname=hostname): if get_object(Asset, hostname=hostname):
continue continue
use_default_auth = 1 if use_default_auth == u'默认' else 0
password_encode = CRYPTOR.encrypt(password) if password else ''
if hostname: if hostname:
asset = Asset(ip=ip, asset = Asset(ip=ip,
port=port, port=port,
hostname=hostname, hostname=hostname,
use_default_auth=use_default_auth, use_default_auth=use_default_auth,
username=username, username=username,
password=password password=password_encode
) )
asset.save() asset.save()
group_list = group.split('/') group_list = group.split('/')
...@@ -406,3 +408,64 @@ def excel_to_db(excel_file): ...@@ -406,3 +408,64 @@ def excel_to_db(excel_file):
asset.group = group_instance asset.group = group_instance
asset.save() asset.save()
return True return True
def get_ansible_asset_info(asset_ip, setup_info):
disk_all = setup_info.get("ansible_devices")
disk_need = {}
for disk_name, disk_info in disk_all.iteritems():
if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'):
disk_need[disk_name] = disk_info.get("size")
all_ip = setup_info.get("ansible_all_ipv4_addresses")
other_ip_list = all_ip.remove(asset_ip) if asset_ip in all_ip else []
other_ip = ','.join(other_ip_list) if other_ip_list else ''
# hostname = setup_info.get("ansible_hostname")
# ip = setup_info.get("ansible_default_ipv4").get("address")
mac = setup_info.get("ansible_default_ipv4").get("macaddress")
brand = setup_info.get("ansible_product_name")
cpu_type = setup_info.get("ansible_processor")[1]
cpu_cores = setup_info.get("ansible_processor_count")
cpu = cpu_type + ' * ' + unicode(cpu_cores)
memory = setup_info.get("ansible_memtotal_mb")
disk = disk_need
system_type = setup_info.get("ansible_distribution")
system_version = setup_info.get("ansible_distribution_version")
# asset_type = setup_info.get("ansible_system")
sn = setup_info.get("ansible_product_serial")
asset_info = [other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand]
return asset_info
def asset_ansible_update(obj_list, name=''):
resource = gen_resource(obj_list)
ansible_instance = MyRunner(resource)
ansible_asset_info = ansible_instance.run(module_name='setup', pattern='*')
for asset in obj_list:
try:
setup_info = ansible_asset_info['contacted'][asset.hostname]['ansible_facts']
except KeyError:
continue
else:
asset_info = get_ansible_asset_info(asset.ip, setup_info)
other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand = asset_info
asset_dic = {"other_ip": other_ip,
"mac": mac,
"cpu": cpu,
"memory": memory,
"disk": disk,
"sn": sn,
"system_type": system_type,
"system_version": system_version,
"brand": brand
}
ansible_record(asset, asset_dic, name)
def asset_ansible_update_all():
name = u'定时更新'
asset_all = Asset.objects.all()
asset_ansible_update(asset_all, name)
...@@ -57,7 +57,7 @@ class Asset(models.Model): ...@@ -57,7 +57,7 @@ class Asset(models.Model):
""" """
asset modle asset modle
""" """
ip = models.GenericIPAddressField(blank=True, null=True, verbose_name=u"主机IP") ip = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"主机IP")
other_ip = models.CharField(max_length=255, blank=True, null=True, verbose_name=u"其他IP") other_ip = models.CharField(max_length=255, blank=True, null=True, verbose_name=u"其他IP")
hostname = models.CharField(unique=True, max_length=128, verbose_name=u"主机名") hostname = models.CharField(unique=True, max_length=128, verbose_name=u"主机名")
port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号") port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号")
...@@ -73,7 +73,7 @@ class Asset(models.Model): ...@@ -73,7 +73,7 @@ class Asset(models.Model):
memory = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'内存') memory = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'内存')
disk = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'硬盘') disk = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'硬盘')
system_type = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"系统类型") system_type = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"系统类型")
system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"版本号") system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"系统版本号")
cabinet = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号') cabinet = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号')
position = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置') position = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置')
number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号') number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号')
......
...@@ -11,6 +11,7 @@ urlpatterns = patterns('', ...@@ -11,6 +11,7 @@ urlpatterns = patterns('',
url(r"^asset_detail/$", asset_detail), url(r"^asset_detail/$", asset_detail),
url(r'^asset_edit/$', asset_edit), url(r'^asset_edit/$', asset_edit),
url(r'^asset_update/$', asset_update), url(r'^asset_update/$', asset_update),
url(r'^asset_update_batch/$', asset_update_batch),
# url(r'^search/$', host_search), # url(r'^search/$', host_search),
# url(r"^show_all_ajax/$", show_all_ajax), # url(r"^show_all_ajax/$", show_all_ajax),
url(r'^group_add/$', group_add), url(r'^group_add/$', group_add),
......
# coding:utf-8 # coding:utf-8
import ast
from django.db.models import Q from django.db.models import Q
from jasset.asset_api import * from jasset.asset_api import *
from jumpserver.api import * from jumpserver.api import *
from jumpserver.models import Setting from jumpserver.models import Setting
from jasset.forms import AssetForm, IdcForm from jasset.forms import AssetForm, IdcForm
from jasset.models import Asset, IDC, AssetGroup, ASSET_TYPE, ASSET_STATUS from jasset.models import Asset, IDC, AssetGroup, ASSET_TYPE, ASSET_STATUS
from ansible_api import Tasks from jperm.ansible_api import Tasks, MyRunner
from jperm.perm_api import gen_resource
@require_role('admin') @require_role('admin')
...@@ -95,8 +95,6 @@ def group_list(request): ...@@ -95,8 +95,6 @@ def group_list(request):
""" """
header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组' header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组'
keyword = request.GET.get('keyword', '') keyword = request.GET.get('keyword', '')
gid = request.GET.get('gid')
sid = request.GET.get('sid')
asset_group_list = AssetGroup.objects.all() asset_group_list = AssetGroup.objects.all()
if keyword: if keyword:
...@@ -132,6 +130,7 @@ def asset_add(request): ...@@ -132,6 +130,7 @@ def asset_add(request):
af = AssetForm() af = AssetForm()
if request.method == 'POST': if request.method == 'POST':
af_post = AssetForm(request.POST) af_post = AssetForm(request.POST)
print af_post
ip = request.POST.get('ip', '') ip = request.POST.get('ip', '')
hostname = request.POST.get('hostname', '') hostname = request.POST.get('hostname', '')
is_active = True if request.POST.get('is_active') == '1' else False is_active = True if request.POST.get('is_active') == '1' else False
...@@ -200,7 +199,7 @@ def asset_edit(request): ...@@ -200,7 +199,7 @@ def asset_edit(request):
header_title, path1, path2 = u'修改资产', u'资产管理', u'修改资产' header_title, path1, path2 = u'修改资产', u'资产管理', u'修改资产'
asset_id = request.GET.get('id', '') asset_id = request.GET.get('id', '')
username = request.session.get('username', 'admin') username = request.user.username
asset = get_object(Asset, id=asset_id) asset = get_object(Asset, id=asset_id)
if asset: if asset:
password_old = asset.password password_old = asset.password
...@@ -211,13 +210,13 @@ def asset_edit(request): ...@@ -211,13 +210,13 @@ def asset_edit(request):
ip = request.POST.get('ip', '') ip = request.POST.get('ip', '')
hostname = request.POST.get('hostname', '') hostname = request.POST.get('hostname', '')
password = request.POST.get('password', '') password = request.POST.get('password', '')
is_active = True if request.POST.get('is_active') == '1' else False
use_default_auth = request.POST.get('use_default_auth', '') use_default_auth = request.POST.get('use_default_auth', '')
try: try:
asset_test = get_object(Asset, hostname=hostname) asset_test = get_object(Asset, hostname=hostname)
if asset_test and asset_id != unicode(asset_test.id): if asset_test and asset_id != unicode(asset_test.id):
error = u'该主机名 %s 已存在!' % hostname emg = u'该主机名 %s 已存在!' % hostname
raise ServerError(error) raise ServerError(emg)
except ServerError: except ServerError:
pass pass
else: else:
...@@ -226,10 +225,12 @@ def asset_edit(request): ...@@ -226,10 +225,12 @@ def asset_edit(request):
if use_default_auth: if use_default_auth:
af_save.username = '' af_save.username = ''
af_save.password = '' af_save.password = ''
af_save.port = None
else: else:
if password_old != password: if password_old != password:
password_encode = CRYPTOR.encrypt(password) password_encode = CRYPTOR.encrypt(password)
af_save.password = password_encode af_save.password = password_encode
af_save.is_active = True if is_active else False
af_save.save() af_save.save()
af_post.save_m2m() af_post.save_m2m()
# asset_new = get_object(Asset, id=asset_id) # asset_new = get_object(Asset, id=asset_id)
...@@ -237,9 +238,10 @@ def asset_edit(request): ...@@ -237,9 +238,10 @@ def asset_edit(request):
info = asset_diff(af_post.__dict__.get('initial'), request.POST) info = asset_diff(af_post.__dict__.get('initial'), request.POST)
db_asset_alert(asset, username, info) db_asset_alert(asset, username, info)
msg = u'主机 %s 修改成功' % ip smg = u'主机 %s 修改成功' % ip
else: else:
emg = u'主机 %s 修改失败' % ip emg = u'主机 %s 修改失败' % ip
return my_render('jasset/error.html', locals(), request)
return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id) return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id)
return my_render('jasset/asset_edit.html', locals(), request) return my_render('jasset/asset_edit.html', locals(), request)
...@@ -250,6 +252,7 @@ def asset_list(request): ...@@ -250,6 +252,7 @@ def asset_list(request):
""" """
asset list view asset list view
""" """
header_title, path1, path2 = u'查看资产', u'资产管理', u'查看资产'
idc_all = IDC.objects.filter() idc_all = IDC.objects.filter()
asset_group_all = AssetGroup.objects.all() asset_group_all = AssetGroup.objects.all()
asset_types = ASSET_TYPE asset_types = ASSET_TYPE
...@@ -311,7 +314,7 @@ def asset_list(request): ...@@ -311,7 +314,7 @@ def asset_list(request):
@require_role('admin') @require_role('admin')
def asset_edit_batch(request): def asset_edit_batch(request):
af = AssetForm() af = AssetForm()
name = request.session.get('username', 'admin') name = request.user.username
asset_group_all = AssetGroup.objects.all() asset_group_all = AssetGroup.objects.all()
if request.method == 'POST': if request.method == 'POST':
...@@ -382,9 +385,8 @@ def asset_edit_batch(request): ...@@ -382,9 +385,8 @@ def asset_edit_batch(request):
asset.save() asset.save()
if alert_list: if alert_list:
username = unicode(name) + ' - ' + u'批量' recode_name = unicode(name) + ' - ' + u'批量'
print alert_list AssetRecord.objects.create(asset=asset, username=recode_name, content=alert_list)
AssetRecord.objects.create(asset=asset, username=username, content=alert_list)
return HttpResponse('ok') return HttpResponse('ok')
return my_render('jasset/asset_edit_batch.html', locals(), request) return my_render('jasset/asset_edit_batch.html', locals(), request)
...@@ -410,53 +412,34 @@ def asset_update(request): ...@@ -410,53 +412,34 @@ def asset_update(request):
""" """
asset_id = request.GET.get('id', '') asset_id = request.GET.get('id', '')
asset = get_object(Asset, id=asset_id) asset = get_object(Asset, id=asset_id)
name = request.user.username
if not asset: if not asset:
return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id) return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id)
name = request.session.get('username', 'admin')
if asset.use_default_auth:
default = Setting.objects.all()
if default:
default = default[0]
username = default.default_user
password = default.default_password
port = default.default_port
else: else:
return HttpResponse(u'没有设置默认用户名和密码!') asset_ansible_update([asset], name)
else:
username = asset.username
password = asset.password
port = asset.port
resource = [{"hostname": asset.ip, "port": port,
"username": username, "password": password}]
ansible_instance = Tasks(resource)
ansible_asset_info = ansible_instance.get_host_info()
if ansible_asset_info['status'] == 'ok':
asset_info = ansible_asset_info['result'][asset.ip]
if asset_info:
hostname = asset_info.get('hostname')
other_ip = ','.join(asset_info.get('other_ip'))
cpu_type = asset_info.get('cpu_type')[1]
cpu_cores = asset_info.get('cpu_cores')
cpu = cpu_type + ' * ' + unicode(cpu_cores)
memory = asset_info.get('memory')
disk = asset_info.get('disk')
sn = asset_info.get('sn')
brand = asset_info.get('brand')
system_type = asset_info.get('system_type')
system_version = asset_info.get('system_version')
asset_dic = {"hostname": hostname, "other_ip": other_ip, "cpu": cpu,
"memory": memory, "disk": disk, "system_type": system_type,
"system_version": system_version, "brand": brand, "sn": sn
}
ansible_record(asset, asset_dic, name)
return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id) return HttpResponseRedirect('/jasset/asset_detail/?id=%s' % asset_id)
@require_role('admin')
def asset_update_batch(request):
if request.method == 'POST':
arg = request.GET.get('arg', '')
name = unicode(request.user.username) + ' - ' + u'自动更新'
if arg == 'all':
asset_list = Asset.objects.all()
else:
asset_list = []
asset_id_all = unicode(request.POST.get('asset_id_all', ''))
asset_id_all = asset_id_all.split(',')
for asset_id in asset_id_all:
asset = get_object(Asset, id=asset_id)
if asset:
asset_list.append(asset)
asset_ansible_update(asset_list, name)
return HttpResponse(u'批量更新成功!')
return HttpResponse(u'批量更新成功!')
@require_role('admin') @require_role('admin')
def idc_add(request): def idc_add(request):
""" """
...@@ -477,9 +460,7 @@ def idc_add(request): ...@@ -477,9 +460,7 @@ def idc_add(request):
return HttpResponseRedirect("/jasset/idc_list/") return HttpResponseRedirect("/jasset/idc_list/")
else: else:
idc_form = IdcForm() idc_form = IdcForm()
return render_to_response('jasset/idc_add.html', return my_render('jasset/idc_add.html', locals(), request)
locals(),
context_instance=RequestContext(request))
@require_role('admin') @require_role('admin')
...@@ -495,9 +476,7 @@ def idc_list(request): ...@@ -495,9 +476,7 @@ def idc_list(request):
else: else:
posts = IDC.objects.exclude(name='ALL').order_by('id') posts = IDC.objects.exclude(name='ALL').order_by('id')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jasset/idc_list.html', return my_render('jasset/idc_list.html', locals(), request)
locals(),
context_instance=RequestContext(request))
@require_role('admin') @require_role('admin')
......
...@@ -9,4 +9,5 @@ urlpatterns = patterns('', ...@@ -9,4 +9,5 @@ urlpatterns = patterns('',
url(r'^log_kill/', log_kill), url(r'^log_kill/', log_kill),
url(r'^record/$', log_record), url(r'^record/$', log_record),
url(r'^web_terminal/$', web_terminal), url(r'^web_terminal/$', web_terminal),
url(r'^get_role_name/$', get_role_name),
) )
\ No newline at end of file
...@@ -4,6 +4,7 @@ from django.template import RequestContext ...@@ -4,6 +4,7 @@ from django.template import RequestContext
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from jumpserver.api import * from jumpserver.api import *
from jperm.perm_api import user_have_perm
from django.http import HttpResponseNotFound from django.http import HttpResponseNotFound
from jlog.log_api import renderTemplate from jlog.log_api import renderTemplate
...@@ -50,6 +51,7 @@ def log_list(request, offset): ...@@ -50,6 +51,7 @@ def log_list(request, offset):
web_monitor_uri = 'ws://%s/monitor' % WEB_SOCKET_HOST web_monitor_uri = 'ws://%s/monitor' % WEB_SOCKET_HOST
web_kill_uri = 'http://%s/kill' % WEB_SOCKET_HOST web_kill_uri = 'http://%s/kill' % WEB_SOCKET_HOST
session_id = request.session.session_key
return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request)) return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request))
...@@ -103,11 +105,20 @@ def log_record(request): ...@@ -103,11 +105,20 @@ def log_record(request):
return HttpResponse('无日志记录!') return HttpResponse('无日志记录!')
@require_role('user')
def get_role_name(request):
asset_id = request.GET.get('id', 9999)
asset = get_object(Asset, id=asset_id)
if asset:
role = user_have_perm(request.user, asset=asset)
return HttpResponse(','.join([i.name for i in role]))
return HttpResponse('error')
@require_role('user')
def web_terminal(request): def web_terminal(request):
#username = get_session.get('username', '') asset_id = request.GET.get('id')
token = request.COOKIES.get('sessionid') role_name = request.GET.get('role')
username = request.user.username web_terminal_uri = 'ws://%s/terminal?id=%s&role=%s' % (WEB_SOCKET_HOST, asset_id, role_name)
asset_name = '127.0.0.1'
web_terminal_uri = 'ws://%s/terminal?username=%s&asset_name=%s&token=%s' % (WEB_SOCKET_HOST, username, asset_name, token)
return render_to_response('jlog/web_terminal.html', locals()) return render_to_response('jlog/web_terminal.html', locals())
...@@ -132,6 +132,15 @@ def get_group_asset_perm(ob): ...@@ -132,6 +132,15 @@ def get_group_asset_perm(ob):
return perm return perm
def user_have_perm(user, asset):
user_perm_all = get_group_user_perm(user)
user_assets = user_perm_all.get('asset').keys()
if asset in user_assets:
return user_perm_all.get('asset').get(asset).get('role')
else:
return []
def gen_resource(ob, ex='', perm=None): def gen_resource(ob, ex='', perm=None):
""" """
ob为用户或资产列表或资产queryset, 如果同时输入用户和资产,则获取用户在这些资产上的信息 ob为用户或资产列表或资产queryset, 如果同时输入用户和资产,则获取用户在这些资产上的信息
......
...@@ -46,7 +46,7 @@ def gen_keys(): ...@@ -46,7 +46,7 @@ def gen_keys():
""" """
key_basename = "key-" + uuid4().hex key_basename = "key-" + uuid4().hex
key_path_dir = os.path.join(KEY_DIR, 'role_key', key_basename) key_path_dir = os.path.join(KEY_DIR, 'role_key', key_basename)
mkdir(key_path_dir, 0755) mkdir(key_path_dir, mode=0755)
key = RSAKey.generate(2048) key = RSAKey.generate(2048)
private_key = os.path.join(key_path_dir, 'id_rsa') private_key = os.path.join(key_path_dir, 'id_rsa')
public_key = os.path.join(key_path_dir, 'id_rsa.pub') public_key = os.path.join(key_path_dir, 'id_rsa.pub')
......
...@@ -13,7 +13,7 @@ password = mysql234 ...@@ -13,7 +13,7 @@ password = mysql234
database = jumpserver database = jumpserver
[websocket] [websocket]
web_socket_host = j:3000 web_socket_host = js:3000
[mail] [mail]
mail_enable = 1 mail_enable = 1
......
...@@ -54,12 +54,15 @@ def get_asset_info(asset): ...@@ -54,12 +54,15 @@ def get_asset_info(asset):
if default: if default:
info['port'] = default.default_port info['port'] = default.default_port
info['username'] = default.default_user info['username'] = default.default_user
try:
info['password'] = CRYPTOR.decrypt(default.default_password) info['password'] = CRYPTOR.decrypt(default.default_password)
except ServerError:
pass
info['ssh_key'] = default.default_pri_key_path info['ssh_key'] = default.default_pri_key_path
else: else:
info['port'] = asset.port info['port'] = asset.port
info['username'] = asset.username info['username'] = asset.username
info['password'] = asset.password info['password'] = CRYPTOR.decrypt(asset.password)
return info return info
......
...@@ -5,16 +5,12 @@ from jumpserver.api import * ...@@ -5,16 +5,12 @@ from jumpserver.api import *
def name_proc(request): def name_proc(request):
user_id = request.user.id user_id = request.user.id
# role_id = request.session.get('role_id') role_id = {'SU': 2, 'GA': 1, 'CU': 0}.get(request.user.role, 0)
role_id = {'SU':2,'GA':1,'CU':0}.get(request.user.role,0) # role_id = 'SU'
# if role_id == 2:
user_total_num = User.objects.all().count() user_total_num = User.objects.all().count()
user_active_num = User.objects.filter().count() user_active_num = User.objects.filter().count()
host_total_num = Asset.objects.all().count() host_total_num = Asset.objects.all().count()
host_active_num = Asset.objects.filter(is_active=True).count() host_active_num = Asset.objects.filter(is_active=True).count()
# else:
# pass
request.session.set_expiry(3600) request.session.set_expiry(3600)
info_dic = {'session_user_id': user_id, info_dic = {'session_user_id': user_id,
......
...@@ -66,6 +66,7 @@ INSTALLED_APPS = ( ...@@ -66,6 +66,7 @@ INSTALLED_APPS = (
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.humanize', 'django.contrib.humanize',
'django_crontab',
'bootstrapform', 'bootstrapform',
'jumpserver', 'jumpserver',
'juser', 'juser',
...@@ -149,3 +150,7 @@ USE_TZ = False ...@@ -149,3 +150,7 @@ USE_TZ = False
STATIC_URL = '/static/' STATIC_URL = '/static/'
BOOTSTRAP_COLUMN_COUNT = 10 BOOTSTRAP_COLUMN_COUNT = 10
CRONJOBS = [
('0 1 * * *', 'jasset.asset_api.asset_ansible_update_all')
]
...@@ -209,7 +209,11 @@ def str_to_dic(info): ...@@ -209,7 +209,11 @@ def str_to_dic(info):
""" """
str to list str to list
""" """
return ast.literal_eval(info).iteritems() if '{' in info:
info_dic = ast.literal_eval(info).iteritems()
else:
info_dic = {}
return info_dic
@register.filter(name='str_to_code') @register.filter(name='str_to_code')
...@@ -237,3 +241,12 @@ def key_exist(username): ...@@ -237,3 +241,12 @@ def key_exist(username):
return True return True
else: else:
return False return False
@register.filter(name='check_role')
def check_role(asset_id, user):
"""
ssh key is exist or not
"""
return user
This diff is collapsed.
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<div class="col-sm-2"> <div class="col-sm-2">
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<input type="checkbox" checked="" id="id_use_default_auth" name="use_default_auth"><span> 使用默认 </span> <input type="checkbox" checked="checked" id="id_use_default_auth" name="use_default_auth"><span> 使用默认 </span>
</label> </label>
</div> </div>
</div> </div>
...@@ -142,26 +142,46 @@ ...@@ -142,26 +142,46 @@
rules: { rules: {
check_ip: [/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/, 'ip地址不正确'], check_ip: [/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/, 'ip地址不正确'],
check_port: [/^\d{1,5}$/, '端口号不正确'], check_port: [/^\d{1,5}$/, '端口号不正确'],
use_default_auth: function() {
var str1 = $("#id_use_default_auth").is(":checked");
if (str1 == true){
var decide = false;
} else {
var decide = true;
}
return decide}
}, },
fields: { fields: {
{# "ip": {#} "ip": {
{# rule: "required;check_ip",#} rule: "check_ip;",
{# tip: "输入IP",#} tip: "输入IP",
{# ok: "",#} ok: "",
{# msg: {required: "必须填写!"}#} msg: {required: "必须填写!"}
{# },#} },
"hostname": { "hostname": {
rule: "required", rule: "required",
tip: "填写主机名", tip: "填写主机名",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
{# "port": {#} "port": {
{# rule: "required;check_port",#} rule: "required(use_default_auth)",
{# tip: "输入端口号",#} tip: "输入端口号",
{# ok: "",#} ok: "",
{# msg: {required: "必须填写!"}#} msg: {required: "必须填写!"}
{# }#} },
"username": {
rule: "required(use_default_auth)",
tip: "输入用户名",
ok: "",
msg: {required: "必须填写!"}
},
"password": {
rule: "required(use_default_auth)",
tip: "输入密码",
ok: "",
msg: {required: "必须填写!"}
}
}, },
valid: function(form) { valid: function(form) {
form.submit(); form.submit();
......
...@@ -11,9 +11,15 @@ ...@@ -11,9 +11,15 @@
<div class="ibox-title"> <div class="ibox-title">
<span class="text text-primary"><b>{{ asset.ip }}</b></span> <span class="text text-primary"><b>{{ asset.ip }}</b></span>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="" href="/jasset/asset_update/?id={{ asset.id }}">
<i class="fa fa-refresh"></i>
</a>
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
</a> </a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user"> <ul class="dropdown-menu dropdown-user">
</ul> </ul>
<a class="close-link"> <a class="close-link">
...@@ -29,14 +35,14 @@ ...@@ -29,14 +35,14 @@
<div> <div>
<div class="text-left"> <div class="text-left">
<table class="table"> <table class="table">
<tr>
<td class="text-navy">IP</td>
<td>{{ asset.ip|default_if_none:"" }}</td>
</tr>
<tr> <tr>
<td class="text-navy">主机名</td> <td class="text-navy">主机名</td>
<td>{{ asset.hostname|default_if_none:"" }}</td> <td>{{ asset.hostname|default_if_none:"" }}</td>
</tr> </tr>
<tr>
<td class="text-navy">IP</td>
<td>{{ asset.ip|default_if_none:"" }}</td>
</tr>
<tr> <tr>
<td class="text-navy">其他IP</td> <td class="text-navy">其他IP</td>
<td> <td>
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<div class="col-sm-2"> <div class="col-sm-2">
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<input type="checkbox" {% if asset.use_default_auth %} checked="" {% endif %} id="id_use_default_auth" name="use_default_auth"><span> 使用默认 </span> <input type="checkbox" {% if asset.use_default_auth %} checked="checked" {% endif %} id="id_use_default_auth" name="use_default_auth"><span> 使用默认 </span>
</label> </label>
</div> </div>
</div> </div>
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<label class="col-sm-2 control-label"> 端口<span class="red-fonts">*</span> </label> <label class="col-sm-2 control-label"> 端口<span class="red-fonts">*</span> </label>
<div class="col-sm-8"> <div class="col-sm-8">
<input type="text" placeholder="Port" value="{{ asset.port }}" name="port" class="form-control"> <input type="text" placeholder="Port" value="{{ asset.port|default_if_none:"" }}" name="port" class="form-control">
</div> </div>
</div> </div>
...@@ -99,6 +99,12 @@ ...@@ -99,6 +99,12 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
{{ af.disk|bootstrap_horizontal }} {{ af.disk|bootstrap_horizontal }}
<div class="hr-line-dashed"></div>
{{ af.system_type|bootstrap_horizontal }}
<div class="hr-line-dashed"></div>
{{ af.system_version|bootstrap_horizontal }}
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
{{ af.number|bootstrap_horizontal }} {{ af.number|bootstrap_horizontal }}
...@@ -186,6 +192,14 @@ ...@@ -186,6 +192,14 @@
rules: { rules: {
check_ip: [/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/, 'ip地址不正确'], check_ip: [/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/, 'ip地址不正确'],
check_port: [/^\d{1,5}$/, '端口号不正确'], check_port: [/^\d{1,5}$/, '端口号不正确'],
use_default_auth: function() {
var str1 = $("#id_use_default_auth").is(":checked");
if (str1 == true){
var decide = false;
} else {
var decide = true;
}
return decide}
}, },
fields: { fields: {
"hostname": { "hostname": {
...@@ -194,17 +208,24 @@ ...@@ -194,17 +208,24 @@
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
{# "ip": {#} "port": {
{# rule: "required;check_ip",#} rule: "required(use_default_auth)",
{# tip: "输入IP",#} tip: "输入端口号",
{# ok: "",#} ok: "",
{# msg: {required: "必须填写!"}#} msg: {required: "必须填写!"}
{# },#} },
{# "port": {#} "username": {
{# rule: "required;check_port",#} rule: "required(use_default_auth)",
{# tip: "输入端口号",#} tip: "输入用户名",
{# ok: "",#} ok: "",
{# msg: {required: "必须填写!"}#} msg: {required: "必须填写!"}
},
"password": {
rule: "required(use_default_auth)",
tip: "输入密码",
ok: "",
msg: {required: "必须填写!"}
}
}, },
valid: function(form) { valid: function(form) {
form.submit(); form.submit();
......
...@@ -54,29 +54,17 @@ ...@@ -54,29 +54,17 @@
<div class="col-sm-2"> <div class="col-sm-2">
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<<<<<<< HEAD
<input type="radio" checked="" value="no_action" id="no" name="use_default_auth" class="auth"><span> 不修改 </span>
=======
<input type="radio" checked="" value="" id="no" name="use_default_auth" class="auth"><span> 不修改 </span> <input type="radio" checked="" value="" id="no" name="use_default_auth" class="auth"><span> 不修改 </span>
>>>>>>> cmdb
</label> </label>
</div> </div>
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<<<<<<< HEAD
<input type="radio" id="default" name="use_default_auth" class="auth"><span> 使用默认 </span>
=======
<input type="radio" id="default" name="use_default_auth" class="auth" value="default"><span> 使用默认 </span> <input type="radio" id="default" name="use_default_auth" class="auth" value="default"><span> 使用默认 </span>
>>>>>>> cmdb
</label> </label>
</div> </div>
<div class="radio i-checks"> <div class="radio i-checks">
<label> <label>
<<<<<<< HEAD
<input type="radio" id="pass" name="use_default_auth" class="auth"><span> 用户名密码 </span>
=======
<input type="radio" id="pass" name="use_default_auth" class="auth" value="user_passwd"><span> 用户名密码 </span> <input type="radio" id="pass" name="use_default_auth" class="auth" value="user_passwd"><span> 用户名密码 </span>
>>>>>>> cmdb
</label> </label>
</div> </div>
</div> </div>
...@@ -138,21 +126,6 @@ ...@@ -138,21 +126,6 @@
</div> </div>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
<<<<<<< HEAD
$('#host_edit').click(function () {
var args = {};
var match = null;
var uuid = decodeURIComponent(location.search.substring(1));
var reg = /(?:([^&amp;]+)=([^&amp;]+))/g;
while((match = reg.exec(uuid))!==null){
args[match[1]] = match[2];
}
var ids = args['uuid'];
$('#uuid').val(ids)
});
=======
>>>>>>> cmdb
$('.auth').click(function(){ $('.auth').click(function(){
if ($(this).attr('id') == 'pass'){ if ($(this).attr('id') == 'pass'){
$('#admin_account').css('display', 'block') $('#admin_account').css('display', 'block')
......
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
<a href="/jasset/asset_detail/?id={{ asset.id }}" class="btn btn-xs btn-primary">详情</a> <a href="/jasset/asset_detail/?id={{ asset.id }}" class="btn btn-xs btn-primary">详情</a>
{% ifnotequal session_role_id 0 %} {% ifnotequal session_role_id 0 %}
<a href="/jasset/asset_edit/?id={{ asset.id }}" class="btn btn-xs btn-info">编辑</a> <a href="/jasset/asset_edit/?id={{ asset.id }}" class="btn btn-xs btn-info">编辑</a>
<a href="/jasset/asset_update/?id={{ asset.id }}" class="btn btn-xs btn-info">更新</a> <a value="{{ asset.id }}" class="conn btn btn-xs btn-warning">连接</a>
<a value="/jasset/asset_del/?id={{ asset.id }}" class="btn btn-xs btn-danger asset_del">删除</a> <a value="/jasset/asset_del/?id={{ asset.id }}" class="btn btn-xs btn-danger asset_del">删除</a>
{% endifnotequal %} {% endifnotequal %}
</td> </td>
...@@ -142,6 +142,8 @@ ...@@ -142,6 +142,8 @@
<div class="col-sm-6"> <div class="col-sm-6">
<input type="button" id="asset_del" class="btn btn-danger btn-sm" name="del_button" value="删除"/> <input type="button" id="asset_del" class="btn btn-danger btn-sm" name="del_button" value="删除"/>
<a value="/jasset/asset_edit_batch/" type="button" class="btn btn-sm btn-warning iframe">修改</a> <a value="/jasset/asset_edit_batch/" type="button" class="btn btn-sm btn-warning iframe">修改</a>
<input type="button" id="asset_update" class="btn btn-info btn-sm" name="update_button" value="更新"/>
<input type="button" id="asset_update_all" class="btn btn-primary btn-sm" name="update_button" value="更新全部"/>
</div> </div>
{% include 'paginator.html' %} {% include 'paginator.html' %}
</div> </div>
...@@ -155,23 +157,10 @@ ...@@ -155,23 +157,10 @@
{% block self_footer_js %} {% block self_footer_js %}
<script> <script>
$('table td').on('change', function(env, id){
var url = "/jasset/show_all_ajax/?env=" + env + "&id=" + id;
console.log(url);
$.ajax({
type: "GET",
url: url,
// data: $("#search_form").serialize(),
success: function (data) {
$("#j_dept_"+id).html(data);
}
});
});
$(document).ready(function(){ $(document).ready(function(){
$('.asset_del').click(function(){ $('.asset_del').click(function(){
var row = $(this).closest('tr'); var row = $(this).closest('tr');
if (confirm("确定删除")) { if (confirm("确定删除?")) {
$.get( $.get(
$(this).attr('value'), $(this).attr('value'),
{}, {},
...@@ -180,9 +169,46 @@ ...@@ -180,9 +169,46 @@
} }
) )
} }
});
$('.conn').click(function(){
var url='/jlog/get_role_name/?id=' + $(this).attr('value');
var href = $(this).attr('href');
var new_url = '/jlog/web_terminal/?id=' + $(this).attr('value') + '&role=';
$.ajax({
type: 'GET',
url: url,
data: {},
success: function(data){
var dataArray = data.split(',');
if (dataArray.length == 1 && data != 'error'){
console.log('one');
window.open(new_url + data, '', 'height=400, width=600, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
} else if (dataArray.length == '1' && data == 'error'){
layer.alert('没有授权角色')
} else {
aUrl = '';
$.each(dataArray, function(index, value){
aUrl += '<a onclick="windowOpen(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + '>' + value + '</a> '
});
layer.alert(aUrl, {
skin: 'layui-layer-molv',
title: '多个角色,请选择一个连接',
closeBtn: 0
}) })
}
}
});
return false
});
}); });
function windowOpen(aTab){
var new_url = aTab.href;
window.open(new_url, '', 'height=400, width=600, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
return false
}
$(".iframe").on('click', function(){ $(".iframe").on('click', function(){
var asset_id_all = getIDall(); var asset_id_all = getIDall();
if (asset_id_all == ''){ if (asset_id_all == ''){
...@@ -219,14 +245,15 @@ ...@@ -219,14 +245,15 @@
}); });
}); });
$('#asset_del').click(function () { $('#asset_del').click(function () {
var asset_id_all = getIDall(); var asset_id_all = getIDall();
console.log(asset_id_all);
if (asset_id_all == ''){ if (asset_id_all == ''){
alert("请至少选择一行!"); alert("请至少选择一行!");
return false; return false;
} }
if (confirm("确定删除")) { if (confirm("确定删除?")) {
$.ajax({ $.ajax({
type: "post", type: "post",
data: {asset_id_all: asset_id_all}, data: {asset_id_all: asset_id_all},
...@@ -238,6 +265,40 @@ ...@@ -238,6 +265,40 @@
} }
}); });
$('#asset_update').click(function () {
var asset_id_all = getIDall();
if (asset_id_all == ''){
alert("请至少选择一行!");
return false;
}
layer.msg('玩命更新中...', {time: 200000});
$.ajax({
type: "post",
data: {asset_id_all: asset_id_all},
url: "/jasset/asset_update_batch/",
success: function () {
parent.location.reload();
}
});
});
{# function update_tips(){#}
{# layer.tips('我是另外一个tips,只不过我长得跟之前那位稍有些不一样。', '吸附元素选择器', {#}
{# tips: [1, '#3595CC'],#}
{# time: 4000#}
{# });#}
{# }#}
$('#asset_update_all').click(function () {
layer.msg('玩命更新中...', {time: 200000});
$.ajax({
type: "post",
url: "/jasset/asset_update_batch/?arg=all",
success: function () {
parent.location.reload();
}
});
});
function change_info(){ function change_info(){
var args = $("#asset_form").serialize(); var args = $("#asset_form").serialize();
...@@ -249,19 +310,6 @@ ...@@ -249,19 +310,6 @@
change_info() change_info()
} }
}); });
function show_all(env, id) {
var url = "/jasset/show_all_ajax/?env=" + env + "&id=" + id;
console.log(url);
$.ajax({
type: "GET",
url: url,
success: function (data) {
$("#j_group_" + id).html(data);
}
});
}
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
{% for field in af %} {% for field in af_form %}
<div class="alert alert-warning text-center"> {{ field.errors }}</div> <div class="alert alert-warning text-center"> {{ field.errors }}</div>
{{ field.label_tag }}: {{ field }} {{ field.label_tag }}: {{ field }}
{% endfor %} {% endfor %}
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a> <a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a>
<input type="button" id="del_check" class="btn btn-danger btn-sm" name="del_button" value="删除所选"/>
<form id="search_form" method="get" action="" class="pull-right mail-search"> <form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="keyword" placeholder="Search"> <input type="text" class="form-control input-sm" id="search_input" name="keyword" placeholder="Search">
...@@ -78,10 +79,9 @@ ...@@ -78,10 +79,9 @@
</table> </table>
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
{% ifequal session_role_id 2 %} <div class="dataTables_info" id="editable_info" role="status" aria-live="polite">
<input type="button" id="del_check" class="btn btn-danger btn-sm" name="del_button" value="删除"/> Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
<!--<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />--> </div>
{% endifequal %}
</div> </div>
{% include 'paginator.html' %} {% include 'paginator.html' %}
</div> </div>
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<div class="col-lg-12"> <div class="col-lg-12">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div id="ibox-content" class="ibox-title"> <div id="ibox-content" class="ibox-title">
<h5> 用户日志详细信息列表 <input type="button" id="test_connect" class="btn btn-primary" value="测试连接 web terminal" /> </h5> <h5> 用户日志详细信息列表 </h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
...@@ -79,11 +79,9 @@ ...@@ -79,11 +79,9 @@
<th class="text-center"> 用户名 </th> <th class="text-center"> 用户名 </th>
<th class="text-center"> 登录主机 </th> <th class="text-center"> 登录主机 </th>
<th class="text-center"> 来源IP </th> <th class="text-center"> 来源IP </th>
{% ifnotequal session_role_id 0 %}
<th class="text-center"> 统计命令 </th> <th class="text-center"> 统计命令 </th>
<th class="text-center"> 实时监控 </th> <th class="text-center"> 实时监控 </th>
<th class="text-center"> 阻断 </th> <th class="text-center"> 阻断 </th>
{% endifnotequal %}
<th class="text-center"> 登录时间 </th> <th class="text-center"> 登录时间 </th>
</tr> </tr>
...@@ -94,11 +92,9 @@ ...@@ -94,11 +92,9 @@
<td id="username" class="text-center"> {{ post.user }} </td> <td id="username" class="text-center"> {{ post.user }} </td>
<td id="ip" class="text-center"> {{ post.host }} </td> <td id="ip" class="text-center"> {{ post.host }} </td>
<td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td> <td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td>
{% ifnotequal session_role_id 0 %}
<td class="text-center"><a href="/jlog/history/?id={{ post.id }}" class="log_command"> 命令统计 </a></td> <td class="text-center"><a href="/jlog/history/?id={{ post.id }}" class="log_command"> 命令统计 </a></td>
<td class="text-center"><a class="monitor" file_path="{{ post.log_path }}"> 监控 </a></td> <td class="text-center"><a class="monitor" file_path="{{ post.log_path }}"> 监控 </a></td>
<td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}", "{{ post.remote_ip }}")' /></td> <td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}", "{{ post.remote_ip }}")' /></td>
{% endifnotequal %}
<td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td> <td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -188,35 +184,19 @@ ...@@ -188,35 +184,19 @@
}}); }});
return false; return false;
}); });
$('#test_connect').click(function(){
window.open('/jlog/web_terminal/?asset_name="hello', '播放', 'height=400, width=600, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
});
}); });
{# function log_search(){#}
{# $.ajax({#}
{# type: "GET",#}
{# url: "/jlog/search/?env=online",#}
{# data: $("#search_form").serialize(),#}
{# success: function (data) {#}
{# $(".tab-content").html(data);#}
{# }#}
{# });#}
{# }#}
function cut(num, host){ function cut(num, host){
console.log(host); console.log(host);
if (host=='Web'){ if (host=='Web'){
var g_url = '{{ web_kill_uri }}' + '?id=' + num; var g_url = '{{ web_kill_uri }}' + '?id=' + num;
} else { } else {
g_url = "/jlog/log_kill/?id=" + num; var g_url = "/jlog/log_kill/?id=" + num;
} }
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: g_url, url: g_url+"&sessionid={{ session_id }}",
success: window.open("/jlog/log_list/online/", "_self") success: window.open("/jlog/log_list/online/", "_self")
}); });
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<div class="alert alert-success text-center">{{ msg }}</div> <div class="alert alert-success text-center">{{ msg }}</div>
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="role_name" class="col-sm-2 control-label">规则名称<span class="red-fonts">*</span></label> <label for="role_name" class="col-sm-2 control-label">角色名称<span class="red-fonts">*</span></label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="role_name" name="role_name" placeholder="Role Name" type="text" class="form-control"> <input id="role_name" name="role_name" placeholder="Role Name" type="text" class="form-control">
</div> </div>
......
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
<li class="role"> <li class="role">
<a href="/jperm/role/">系统角色</a> <a href="/jperm/role/">系统角色</a>
</li> </li>
<li class="apply_show online"><a href="/jperm/apply_show/online/">权限审批</a></li>
<li class="apply_show online"><a href="/jperm/log/">授权记录</a></li>
</ul> </ul>
</li> </li>
<li id="jlog"> <li id="jlog">
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<script> <script>
$(".iframe_user").on('click', function(){ $(".iframe_user").on('click', function(){
var url= $(this).attr("value"); var url= $(this).attr("value");
$.layer({ layer.open({
type: 2, type: 2,
title: '个人信息', title: '个人信息',
maxmin: true, maxmin: true,
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
shade: [0.5, '#000000'], shade: [0.5, '#000000'],
shadeClose: true, shadeClose: true,
area : ['800px' , '600px'], area : ['800px' , '600px'],
iframe: {src: url} content: url
}); });
}); });
</script> </script>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<div class="panel-options"> <div class="panel-options">
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li id="tab1" class="active"><a data-toggle="tab" href="#tab-default" aria-expanded="true">默认设置</a></li> <li id="tab1" class="active"><a data-toggle="tab" href="#tab-default" aria-expanded="true">默认设置</a></li>
<li id="tab2" class=""><a data-toggle="tab" href="#tab-email" aria-expanded="true">邮箱设置</a></li> {# <li id="tab2" class=""><a data-toggle="tab" href="#tab-email" aria-expanded="true">邮箱设置</a></li>#}
</ul> </ul>
</div> </div>
</div> </div>
...@@ -82,15 +82,15 @@ ...@@ -82,15 +82,15 @@
</form> </form>
</div> </div>
<div id="tab-email" class="tab-pane"> {# <div id="tab-email" class="tab-pane">#}
<table class="table table-striped table-bordered table-hover " id="editable" > {# <table class="table table-striped table-bordered table-hover " id="editable" >#}
<thead> {# <thead>#}
<tr> {# <tr>#}
<th class="text-center">组名</th> {# <th class="text-center">组名</th>#}
</tr> {# </tr>#}
</thead> {# </thead>#}
</table> {# </table>#}
</div> {# </div>#}
</div> </div>
</div> </div>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment