修改bug

pull/6/head
guanghongwei 2015-04-15 12:07:59 +08:00
parent 6a565d0a45
commit 3424bef5d0
14 changed files with 225 additions and 65 deletions

View File

@ -120,7 +120,7 @@ def dept_perm_list(request):
if keyword: if keyword:
contact_list = DEPT.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)).order_by('name') contact_list = DEPT.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)).order_by('name')
else: else:
contact_list = DEPT.objects.filter(id__gt=1) contact_list = DEPT.objects.filter(id__gt=2)
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(contact_list, request) contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(contact_list, request)
@ -533,14 +533,23 @@ def cmd_add(request):
dept_id = request.POST.get('dept_id') dept_id = request.POST.get('dept_id')
cmd = ','.join(request.POST.get('cmd').split()) cmd = ','.join(request.POST.get('cmd').split())
comment = request.POST.get('comment') comment = request.POST.get('comment')
dept = DEPT.objects.filter(id=dept_id) dept = DEPT.objects.filter(id=dept_id)
if dept:
try:
if CmdGroup.objects.filter(name=name):
error = '%s 鍛戒护缁勫凡瀛樺湪'
raise ServerError(error)
if not dept:
error = u"閮ㄩ棬涓嶈兘涓虹┖"
raise ServerError(error)
except ServerError, e:
pass
else:
dept = dept[0] dept = dept[0]
CmdGroup.objects.create(name=name, dept=dept, cmd=cmd, comment=comment) CmdGroup.objects.create(name=name, dept=dept, cmd=cmd, comment=comment)
else: msg = u'鍛戒护缁勬坊鍔犳垚鍔'
error = u"閮ㄩ棬涓嶈兘涓虹┖" return HttpResponseRedirect('/jperm/cmd_list/')
msg = u'鍛戒护缁勬坊鍔犳垚鍔'
return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request))
@ -555,8 +564,16 @@ def cmd_add_adm(request):
cmd = ','.join(request.POST.get('cmd').split()) cmd = ','.join(request.POST.get('cmd').split())
comment = request.POST.get('comment') comment = request.POST.get('comment')
CmdGroup.objects.create(name=name, dept=dept, cmd=cmd, comment=comment) try:
msg = u'鍛戒护缁勬坊鍔犳垚鍔' if CmdGroup.objects.filter(name=name):
error = '%s 鍛戒护缁勫凡瀛樺湪'
raise ServerError(error)
except ServerError, e:
pass
else:
CmdGroup.objects.create(name=name, dept=dept, cmd=cmd, comment=comment)
return HttpResponseRedirect('/jperm/cmd_list/')
return HttpResponseRedirect('/jperm/cmd_list/') return HttpResponseRedirect('/jperm/cmd_list/')
return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request))
@ -568,10 +585,12 @@ def cmd_edit(request):
cmd_group_id = request.GET.get('id') cmd_group_id = request.GET.get('id')
cmd_group = CmdGroup.objects.filter(id=cmd_group_id) cmd_group = CmdGroup.objects.filter(id=cmd_group_id)
dept_all = DEPT.objects.all()
if cmd_group: if cmd_group:
cmd_group = cmd_group[0] cmd_group = cmd_group[0]
cmd_group_id = cmd_group.id cmd_group_id = cmd_group.id
dept_id = cmd_group.dept.id
name = cmd_group.name name = cmd_group.name
cmd = '\n'.join(cmd_group.cmd.split(',')) cmd = '\n'.join(cmd_group.cmd.split(','))
comment = cmd_group.comment comment = cmd_group.comment
@ -579,12 +598,23 @@ def cmd_edit(request):
if request.method == 'POST': if request.method == 'POST':
cmd_group_id = request.POST.get('cmd_group_id') cmd_group_id = request.POST.get('cmd_group_id')
name = request.POST.get('name') name = request.POST.get('name')
dept_id = request.POST.get('dept_id')
cmd = ','.join(request.POST.get('cmd').split()) cmd = ','.join(request.POST.get('cmd').split())
comment = request.POST.get('comment') comment = request.POST.get('comment')
cmd_group = CmdGroup.objects.filter(id=cmd_group_id) cmd_group = CmdGroup.objects.filter(id=cmd_group_id)
if cmd_group:
cmd_group.update(name=name, cmd=cmd, comment=comment) dept = DEPT.objects.filter(id=dept_id)
try:
if not dept:
error = '娌℃湁璇ラ儴闂'
raise ServerError(error)
if not cmd_group:
error = '娌℃湁璇ュ懡浠ょ粍'
except ServerError, e:
pass
else:
cmd_group.update(name=name, cmd=cmd, dept=dept[0], comment=comment)
return HttpResponseRedirect('/jperm/cmd_list/') return HttpResponseRedirect('/jperm/cmd_list/')
return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/sudo_cmd_add.html', locals(), context_instance=RequestContext(request))
@ -624,10 +654,22 @@ def cmd_del(request):
@require_admin @require_admin
def cmd_detail(request): def cmd_detail(request):
cmd_id = request.GET.get('id') cmd_ids = request.GET.get('id').split(',')
cmd_group = CmdGroup.objects.filter(id=cmd_id) cmds = []
if cmd_group: if len(cmd_ids) == 1:
cmd_group = cmd_group[0] cmd_group = CmdGroup.objects.filter(id=cmd_ids[0])
if cmd_group:
cmd_group = cmd_group[0]
cmds.extend(cmd_group.cmd.split(','))
cmd_group_name = cmd_group.name
else:
cmd_groups = []
for cmd_id in cmd_ids:
cmd_groups.extend(CmdGroup.objects.filter(id=cmd_id))
for cmd_group in cmd_groups:
cmds.extend(cmd_group.cmd.split(','))
cmds_str = ', '.join(cmds)
return render_to_response('jperm/sudo_cmd_detail.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/sudo_cmd_detail.html', locals(), context_instance=RequestContext(request))

View File

@ -30,8 +30,8 @@ key = 88aaaf7ffe3c6c04
[mail] [mail]
email_host = mail.funshion.com email_host = smtp.qq.com
email_port = 25 email_port = 25
email_host_user = jkfunshion email_host_user = jumpserver@qq.com
email_host_password = jkmail% email_host_password = jumpserver.org
email_use_tls = False email_use_tls = False

View File

@ -375,39 +375,38 @@ def validate(request, user_group=None, user=None, asset_group=None, asset=None,
if user_group: if user_group:
dept_user_groups = dept.usergroup_set.all() dept_user_groups = dept.usergroup_set.all()
user_groups = [] user_group_ids = []
for user_group_id in user_group: for group in dept_user_groups:
user_groups.extend(UserGroup.objects.filter(id=user_group_id)) user_group_ids.append(str(group.id))
if not set(user_groups).issubset(set(dept_user_groups)):
if not set(user_group).issubset(set(user_group_ids)):
return False return False
if user: if user:
dept_users = dept.user_set.all() dept_users = dept.user_set.all()
users = [] user_ids = []
for user_id in user: for user in dept_users:
users.extend(User.objects.filter(id=user_id)) user_ids.append(str(user.id))
if not set(users).issubset(set(dept_users)): if not set(user).issubset(set(user_ids)):
return False return False
if asset_group: if asset_group:
dept_asset_groups = dept.bisgroup_set.all() dept_asset_groups = dept.bisgroup_set.all()
asset_groups = [] asset_group_ids = []
for group_id in asset_group: for group in dept_asset_groups:
asset_groups.extend(BisGroup.objects.filter(id=int(group_id))) asset_group_ids.append(group.id)
if not set(asset_groups).issubset(set(dept_asset_groups)): if not set(asset_group).issubset(set(asset_group_ids)):
return False return False
if asset: if asset:
dept_assets = dept.asset_set.all() dept_assets = dept.asset_set.all()
assets, eassets = [], [] asset_ids = []
for asset_id in dept_assets: for asset in dept_assets:
eassets.append(int(asset_id.id)) asset_ids.append(str(asset.id))
for i in asset:
assets.append(int(i))
if not set(assets).issubset(eassets): if not set(asset).issubset(set(asset_ids)):
return False return False
return True return True

View File

@ -157,6 +157,18 @@ def ugrp_perm_agrp_count(user_group_id):
return 0 return 0
@register.filter(name='ugrp_sudo_agrp_count')
def ugrp_sudo_agrp_count(user_group_id):
user_group = UserGroup.objects.filter(id=user_group_id)
asset_groups = []
if user_group:
user_group = user_group[0]
for perm in user_group.sudoperm_set.all():
asset_groups.extend(perm.asset_group.all())
return len(set(asset_groups))
return 0
@register.filter(name='ugrp_perm_asset_count') @register.filter(name='ugrp_perm_asset_count')
def ugrp_perm_asset_count(user_group_id): def ugrp_perm_asset_count(user_group_id):
user_group = UserGroup.objects.filter(id=user_group_id) user_group = UserGroup.objects.filter(id=user_group_id)
@ -169,6 +181,21 @@ def ugrp_perm_asset_count(user_group_id):
return len(set(assets)) return len(set(assets))
@register.filter(name='ugrp_sudo_asset_count')
def ugrp_sudo_asset_count(user_group_id):
user_group = UserGroup.objects.filter(id=user_group_id)
asset_groups = []
assets = []
if user_group:
user_group = user_group[0]
for perm in user_group.sudoperm_set.all():
asset_groups.extend(perm.asset_group.all())
for asset_group in asset_groups:
assets.extend(asset_group.asset_set.all())
return len(set(assets))
@register.filter(name='get_user_alias') @register.filter(name='get_user_alias')
def get_user_alias(post, user_id): def get_user_alias(post, user_id):
user = User.objects.get(id=user_id) user = User.objects.get(id=user_id)
@ -298,8 +325,52 @@ def sudo_cmd_list(cmd_group_id):
@register.filter(name='sudo_cmd_count') @register.filter(name='sudo_cmd_count')
def sudo_cmd_count(cmd_group_id): def sudo_cmd_count(user_group_id):
cmd_group = CmdGroup.objects.filter(id=cmd_group_id) user_group = UserGroup.objects.filter(id=user_group_id)
if cmd_group: cmds = []
cmd_group = cmd_group[0] if user_group:
return len(cmd_group.cmd.split(',')) user_group = user_group[0]
cmd_groups = []
for perm in user_group.sudoperm_set.all():
cmd_groups.extend(perm.cmd_group.all())
for cmd_group in cmd_groups:
cmds.extend(cmd_group.cmd.split(','))
return len(set(cmds))
else:
return 0
@register.filter(name='sudo_cmd_count')
def sudo_cmd_count(user_group_id):
user_group = UserGroup.objects.filter(id=user_group_id)
cmds = []
if user_group:
user_group = user_group[0]
cmd_groups = []
for perm in user_group.sudoperm_set.all():
cmd_groups.extend(perm.cmd_group.all())
for cmd_group in cmd_groups:
cmds.extend(cmd_group.cmd.split(','))
return len(set(cmds))
else:
return 0
@register.filter(name='sudo_cmd_ids')
def sudo_cmd_ids(user_group_id):
user_group = UserGroup.objects.filter(id=user_group_id)
if user_group:
user_group = user_group[0]
cmd_groups = []
for perm in user_group.sudoperm_set.all():
cmd_groups.extend(perm.cmd_group.all())
cmd_ids = [str(cmd_group.id) for cmd_group in cmd_groups]
return ','.join(cmd_ids)
else:
return '0'

View File

@ -242,11 +242,12 @@ def login(request):
else: else:
username = request.POST.get('username') username = request.POST.get('username')
password = request.POST.get('password') password = request.POST.get('password')
user = User.objects.filter(username=username) user_filter = User.objects.filter(username=username)
if user: if user_filter:
user = user[0] user = user_filter[0]
if md5_crypt(password) == user.password: if md5_crypt(password) == user.password:
request.session['user_id'] = user.id request.session['user_id'] = user.id
user_filter.update(last_login=datetime.datetime.now())
if user.role == 'SU': if user.role == 'SU':
request.session['role_id'] = 2 request.session['role_id'] = 2
elif user.role == 'DA': elif user.role == 'DA':

View File

@ -71,6 +71,7 @@ def db_add_user(**kwargs):
def db_update_user(**kwargs): def db_update_user(**kwargs):
print kwargs
groups_post = kwargs.pop('groups') groups_post = kwargs.pop('groups')
user_id = kwargs.pop('user_id') user_id = kwargs.pop('user_id')
user = User.objects.filter(id=user_id) user = User.objects.filter(id=user_id)
@ -354,11 +355,16 @@ def group_add(request):
error = u'缁勫悕 鎴 閮ㄩ棬 涓嶈兘涓虹┖' error = u'缁勫悕 鎴 閮ㄩ棬 涓嶈兘涓虹┖'
raise AddError(error) raise AddError(error)
if UserGroup.objects.filter(name=group_name):
error = u'缁勫悕宸插瓨鍦'
raise AddError(error)
dept = DEPT.objects.filter(id=dept_id) dept = DEPT.objects.filter(id=dept_id)
if dept: if dept:
dept = dept[0] dept = dept[0]
else: else:
AddError(u'閮ㄩ棬涓嶅瓨鍦') error = u'閮ㄩ棬涓嶅瓨鍦'
raise AddError(error)
db_add_group(name=group_name, users=users_selected, dept=dept, comment=comment) db_add_group(name=group_name, users=users_selected, dept=dept, comment=comment)
except AddError: except AddError:
@ -843,7 +849,7 @@ def user_edit(request):
groups_str = ' '.join([str(group.id) for group in user.group.all()]) groups_str = ' '.join([str(group.id) for group in user.group.all()])
else: else:
user_id = request.GET.get('user_id', '') user_id = request.POST.get('user_id', '')
password = request.POST.get('password', '') password = request.POST.get('password', '')
name = request.POST.get('name', '') name = request.POST.get('name', '')
email = request.POST.get('email', '') email = request.POST.get('email', '')
@ -858,7 +864,7 @@ def user_edit(request):
if dept: if dept:
dept = dept[0] dept = dept[0]
else: else:
dept = DEPT.objects.get(id='1') dept = DEPT.objects.get(id='2')
if user_id: if user_id:
user = User.objects.filter(id=user_id) user = User.objects.filter(id=user_id)

View File

@ -1,5 +1,5 @@
#!/usr/bin/python #!/usr/bin/python
#coding: utf-8 # coding: utf-8
import os import os
import re import re

24
service.sh Normal file
View File

@ -0,0 +1,24 @@
#!/bin/bash
# Date: 2015-04-12
# Version: 2.0.0
# Site: http://www.jumpserver.org
# Author: jumpserver group
. /etc/init.d/functions
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin
base_dir=$(dirname $0)
case $1 in
start)
daemon $base_dir/manage.py runserver 0.0.0.0:80 &
daemon $base_dir/log_handler.py &
cd $base_dir/websocket/; daemon node index.js &
;;
stop)
pkill -15 python
pkill -15 node
;;
esac

View File

@ -16,8 +16,6 @@ function search_ip(text, noselect, total){
}) })
} }
</script> </script>
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
@ -118,8 +116,6 @@ function search_ip(text, noselect, total){
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -172,14 +168,11 @@ $('#sudoPerm').validator({
$(document).ready(function(){ $(document).ready(function(){
$("#submit_button").click(function(){ $("#submit_button").click(function(){
$('#users_selected option').each(function(){ $('#sudoPerm option').each(function(){
$(this).prop('selected', true) $(this).prop('selected', true)
}) })
}); });
}) })
</script> </script>

View File

@ -63,7 +63,12 @@
<div class="col-sm-8"> <div class="col-sm-8">
<select id="dept_id" name="dept_id" class="form-control m-b"> <select id="dept_id" name="dept_id" class="form-control m-b">
{% for dept in dept_all %} {% for dept in dept_all %}
<option value="{{ dept.id }}" selected>{{ dept.name }}</option> {% ifequal dept_id dept.id %}
<option value="{{ dept.id }}" selected>{{ dept.name }}</option>
{% else %}
<option value="{{ dept.id }}">{{ dept.name }}</option>
{% endifequal %}
{% endfor %} {% endfor %}
</select> </select>
</div> </div>

View File

@ -14,10 +14,13 @@
<body> <body>
<div class="row"> <div class="row">
<div class="contact-box"> <div class="contact-box">
{% if cmd_group_name %}
<h2 class="text-center">{{ cmd_group.name }} 鍛戒护璇︽儏</h2> <h2 class="text-center">{{ cmd_group.name }} 鍛戒护璇︽儏</h2>
{% endif %}
<div class="ibox-content"> <div class="ibox-content">
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
{% if cmd_group_name %}
<thead> <thead>
<tr> <tr>
<td class="text-center" width="120">ID</td> <td class="text-center" width="120">ID</td>
@ -31,10 +34,11 @@
<td class="text-center">{{ cmd_group.name }}</td> <td class="text-center">{{ cmd_group.name }}</td>
<td class="text-center">{{ cmd_group.dept.name }}</td> <td class="text-center">{{ cmd_group.dept.name }}</td>
</tr> </tr>
{% endif %}
<tr> <tr>
<td colspan="1" class="text-center">鍛戒护锛</td> <td colspan="1" class="text-center">鍛戒护锛</td>
<td colspan="6" class="text-center"> <td colspan="6" class="text-center">
<b>{{ cmd_group.cmd }}</b> <b>{{ cmds_str }}</b>
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -49,6 +49,7 @@
<tr> <tr>
<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> <th class="text-center">澶囨敞</th>
<th class="text-center">鎿嶄綔</th> <th class="text-center">鎿嶄綔</th>
</tr> </tr>
@ -58,9 +59,10 @@
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center"> {{ group.name }} </td> <td class="text-center"> {{ group.name }} </td>
<td class="text-center" title="{{ group.cmd }}"> {{ group.cmd | string_length:50 }} </td> <td class="text-center" title="{{ group.cmd }}"> {{ group.cmd | string_length:50 }} </td>
<td class="text-center"> {{ group.dept.name }} </td>
<td class="text-center"> {{ group.comment }} </td> <td class="text-center"> {{ group.comment }} </td>
<td class="text-center"> <td class="text-center">
{# <a href="../cmd_detail/?id={{ group.id }}" class="btn btn-xs btn-info">璇︽儏</a>#} <a value="../cmd_detail/?id={{ group.id }}" class="btn btn-xs btn-primary iframe">璇︽儏</a>
<a href="../cmd_edit/?id={{ group.id }}" class="btn btn-xs btn-info">缂栬緫</a> <a href="../cmd_edit/?id={{ group.id }}" class="btn btn-xs btn-info">缂栬緫</a>
<a href="../cmd_del/?id={{ group.id }}" class="btn btn-xs btn-danger">鍒犻櫎</a> <a href="../cmd_del/?id={{ group.id }}" class="btn btn-xs btn-danger">鍒犻櫎</a>
</td> </td>
@ -117,8 +119,21 @@
</div> </div>
<script> <script>
$(document).ready(function(){ $(document).ready(function() {
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); $(".iframe").on('click', function () {
var url = $(this).attr("value");
$.layer({
type: 2,
title: '鍛戒护璇︽儏',
maxmin: true,
shift: 'top',
border: [2, 0.3, '#1AB394'],
shade: [0.5, '#000000'],
shadeClose: true,
area: ['800px', '600px'],
iframe: {src: url}
});
});
}); });
</script> </script>

View File

@ -67,9 +67,9 @@
<td class="text-center"> {{ group.name }} </td> <td class="text-center"> {{ group.name }} </td>
<td class="text-center"> {{ group.dept.name }} </td> <td class="text-center"> {{ group.dept.name }} </td>
<td class="text-center"><a href="/juser/user_list/?gid={{ group.id }}">{{ group.id | member_count }} </a> </td> <td class="text-center"><a href="/juser/user_list/?gid={{ group.id }}">{{ group.id | member_count }} </a> </td>
<td class="text-center"><a href="/jasset/group_list/?sid={{ group.id }}">{{ group.id | ugrp_perm_agrp_count }} </a> </td> <td class="text-center"><a href="/jasset/group_list/?sid={{ group.id }}">{{ group.id | ugrp_sudo_agrp_count }} </a> </td>
<td class="text-center"><a href="/jasset/host_list/?sid={{ group.id }}"> {{ group.id | ugrp_perm_asset_count }} </a> </td> <td class="text-center"><a href="/jasset/host_list/?sid={{ group.id }}"> {{ group.id | ugrp_sudo_asset_count }} </a> </td>
<td class="text-center"><a value="/jperm/cmd_detail/?id={{ group.id }}" class="iframe">{{ group.id | sudo_cmd_count }}</a> </td> <td class="text-center"><a value="/jperm/cmd_detail/?id={{ group.id | sudo_cmd_ids }}" class="iframe">{{ group.id | sudo_cmd_count }}</a> </td>
<td class="text-center"> {{ group.comment }} </td> <td class="text-center"> {{ group.comment }} </td>
<td class="text-center"> <td class="text-center">
<a href="../sudo_edit/?id={{ group.id }}" class="btn btn-xs btn-danger">sudo鎺堟潈</a> <a href="../sudo_edit/?id={{ group.id }}" class="btn btn-xs btn-danger">sudo鎺堟潈</a>

View File

@ -56,7 +56,7 @@
uploadMultiple: true, uploadMultiple: true,
parallelUploads: 100, parallelUploads: 100,
maxFiles: 100, maxFiles: 100,
url: '/upload/', url: '/file/upload/',
// Dropzone settings // Dropzone settings
init: function() { init: function() {