merge with wangyong

This commit is contained in:
guanghongwei
2015-04-02 20:40:54 +08:00
23 changed files with 909 additions and 56 deletions

View File

@@ -1,11 +1,18 @@
# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import datetime
from django.core.mail import send_mail
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext
from juser.models import User, UserGroup, DEPT
from jasset.models import Asset, BisGroup
from jperm.models import Perm, SudoPerm, CmdGroup
from jperm.models import Perm, SudoPerm, CmdGroup, Apply
from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.db.models import Q
from jumpserver.views import LDAP_ENABLE, ldap_conn, CONF, page_list_return, pages
@@ -617,3 +624,110 @@ def cmd_del(request):
if cmd_group:
cmd_group[0].delete()
return HttpResponseRedirect('/jperm/cmd_list/')
@require_login
def perm_apply(request):
header_title, path1, path2 = u'主机权限申请', u'权限管理', u'申请主机'
user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username
dept_id = get_user_dept(request)
deptname = DEPT.objects.get(id=dept_id).name
dept = DEPT.objects.get(id=dept_id)
posts = Asset.objects.filter(dept=dept)
egroup = dept.bisgroup_set.all()
dept_da = User.objects.filter(dept_id=dept_id, role='DA')
if request.method == 'POST':
applyer = request.POST.get('applyer')
dept = request.POST.get('dept')
da = request.POST.get('da')
group = request.POST.getlist('group')
hosts = request.POST.getlist('hosts')
comment = request.POST.get('comment')
da = User.objects.get(id=da)
mail_address = da.email
mail_title = '%s - 权限申请' % username
# print da.username, applyer, group, hosts, datetime.datetime.now(), comment, url
group_lis = ', '.join(group)
hosts_lis = ', '.join(hosts)
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, asset=hosts, status=0, comment=comment)
uuid = Apply.objects.get(applyer=applyer, asset=hosts, comment=comment).uuid
url = "http://127.0.0.1:8000/jperm/apply_exec/?uuid=%s" % uuid
mail_msg = """
Hi,%s:
有新的权限申请, 详情如下:
申请人: %s
申请主机组: %s
申请的主机: %s
申请时间: %s
申请说明: %s
请及时审批, 审批完成后点击以下链接,告知各位。
%s
""" % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url)
send_mail(mail_title, mail_msg, 'jkfunshion@fun.tv', [mail_address], fail_silently=False)
smg = "提交成功,已发邮件通知部门管理员。"
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
def perm_apply_exec(request):
uuid = request.GET.get('uuid')
p_apply = Apply.objects.filter(uuid=str(uuid))
q_apply = Apply.objects.get(uuid=str(uuid))
if p_apply:
user = User.objects.get(username=q_apply.applyer)
mail_address = user.email
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
p_apply.update(status=1, date_end=time_now)
mail_title = '%s - 权限审批完成' % q_apply.applyer
mail_msg = """
Hi,%s:
您所申请的权限已由 %s%s 审批完成, 请登录验证。
""" % (q_apply.applyer, q_apply.approver, time_now)
send_mail(mail_title, mail_msg, 'jkfunshion@fun.tv', [mail_address], fail_silently=False)
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
def get_apply_posts(request, status, username, dept_name, keyword=None):
if is_super_user(request):
if keyword:
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=status).order_by('-date_add')
else:
posts = Apply.objects.filter(status=status).order_by('-date_add')
elif is_group_admin(request):
if keyword:
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=status).filter(dept=dept_name).order_by('-date_add')
else:
posts = Log.objects.filter(status=status).filter(dept=dept_name).order_by('-date_add')
elif is_common_user(request):
if keyword:
posts = Apply.objects.filter(applyer=username).filter(status=status).filter(Q(applyer__contains=keyword) |
Q(asset__contains=keyword)).order_by('-date_add')
else:
posts = Apply.objects.filter(applyer=username).filter(status=status).order_by('-date_add')
return posts
def perm_apply_log(request, offset):
header_title, path1, path2 = u'权限申请记录', u'权限管理', u'申请记录'
keyword = request.GET.get('keyword')
dept_id = get_user_dept(request)
dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username
if offset == 'online':
posts = get_apply_posts(request, 0, username, dept_name, keyword)
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jperm/perm_log_online.html', locals(), context_instance=RequestContext(request))
elif offset == 'offline':
posts = get_apply_posts(request, 1, username, dept_name, keyword)
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jperm/perm_log_offline.html', locals(), context_instance=RequestContext(request))