mirror of https://github.com/jumpserver/jumpserver
				
				
				
			完工,睡觉
							parent
							
								
									07b0e2980e
								
							
						
					
					
						commit
						a94c050fd9
					
				
							
								
								
									
										118
									
								
								jperm/views.py
								
								
								
								
							
							
						
						
									
										118
									
								
								jperm/views.py
								
								
								
								
							| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
# coding: utf-8
 | 
			
		||||
 | 
			
		||||
from django.shortcuts import render_to_response
 | 
			
		||||
from django.http import HttpResponseRedirect
 | 
			
		||||
from django.http import HttpResponseRedirect, HttpResponse
 | 
			
		||||
from django.template import RequestContext
 | 
			
		||||
from juser.models import User, UserGroup
 | 
			
		||||
from jasset.models import Asset, BisGroup
 | 
			
		||||
| 
						 | 
				
			
			@ -18,23 +18,6 @@ if LDAP_ENABLE:
 | 
			
		|||
    LDAP_ROOT_PW = CONF.get('ldap', 'root_pw')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def perm_group_update(user_group_name='', user_group_id='', asset_groups_name='', asset_groups_id=''):
 | 
			
		||||
    if user_group_name:
 | 
			
		||||
        user_group = UserGroup.objects.get(name=user_group_name)
 | 
			
		||||
    else:
 | 
			
		||||
        user_group = UserGroup.objects.get(id=user_group_id)
 | 
			
		||||
 | 
			
		||||
    Perm.objects.filter(user_group=user_group).delete()
 | 
			
		||||
    if asset_groups_name:
 | 
			
		||||
        for asset_group_name in asset_groups_name:
 | 
			
		||||
            asset_group = BisGroup.objects.get(name=asset_group_name)
 | 
			
		||||
            Perm(user_group=user_group, asset_group=asset_group).save()
 | 
			
		||||
    else:
 | 
			
		||||
        for asset_group_id in asset_groups_id:
 | 
			
		||||
            asset_group = BisGroup.objects.get(id=asset_group_id)
 | 
			
		||||
            Perm(user_group=user_group, asset_group=asset_group).save()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def user_asset_cmd_groups_get(user_groups_select='', asset_groups_select='', cmd_groups_select=''):
 | 
			
		||||
    user_groups_select_list = []
 | 
			
		||||
    asset_groups_select_list = []
 | 
			
		||||
| 
						 | 
				
			
			@ -78,8 +61,11 @@ def perm_add(request):
 | 
			
		|||
 | 
			
		||||
def perm_list(request):
 | 
			
		||||
    header_title, path1, path2 = u'主机授权', u'授权管理', u'授权详情'
 | 
			
		||||
    contact_list = Perm.objects.all()
 | 
			
		||||
    contact_list2 = User.objects.all().order_by('id')
 | 
			
		||||
    keyword = request.GET.get('search', '')
 | 
			
		||||
    if keyword:
 | 
			
		||||
        contact_list = Perm.objects.filter(name__icontains=keyword)
 | 
			
		||||
    else:
 | 
			
		||||
        contact_list = Perm.objects.all()
 | 
			
		||||
    p = paginator = Paginator(contact_list, 10)
 | 
			
		||||
    try:
 | 
			
		||||
        current_page = int(request.GET.get('page', '1'))
 | 
			
		||||
| 
						 | 
				
			
			@ -95,45 +81,63 @@ def perm_list(request):
 | 
			
		|||
    return render_to_response('jperm/perm_list.html', locals(), context_instance=RequestContext(request))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def perm_list_ajax(request):
 | 
			
		||||
    tab = request.POST.get('tab', 'tab1')
 | 
			
		||||
    search = request.POST.get('search', '')
 | 
			
		||||
# def perm_list_ajax(request):
 | 
			
		||||
#     tab = request.POST.get('tab', 'tab1')
 | 
			
		||||
#     search = request.POST.get('search', '')
 | 
			
		||||
#
 | 
			
		||||
#     if tab == 'tab1':
 | 
			
		||||
#         groups = contact_list = UserGroup.objects.filter(name__icontains=search).order_by('type')
 | 
			
		||||
#         p = paginator = Paginator(contact_list, 10)
 | 
			
		||||
#
 | 
			
		||||
#         try:
 | 
			
		||||
#             page = int(request.GET.get('page', '1'))
 | 
			
		||||
#         except ValueError:
 | 
			
		||||
#             page = 1
 | 
			
		||||
#
 | 
			
		||||
#         try:
 | 
			
		||||
#             contacts = paginator.page(page)
 | 
			
		||||
#         except (EmptyPage, InvalidPage):
 | 
			
		||||
#             contacts = paginator.page(paginator.num_pages)
 | 
			
		||||
#
 | 
			
		||||
#     else:
 | 
			
		||||
#         users = contact_list2 = User.objects.filter(name__icontains=search).order_by('id')
 | 
			
		||||
#         p2 = paginator2 = Paginator(contact_list2, 10)
 | 
			
		||||
#
 | 
			
		||||
#         try:
 | 
			
		||||
#             page = int(request.GET.get('page', '1'))
 | 
			
		||||
#         except ValueError:
 | 
			
		||||
#             page = 1
 | 
			
		||||
#
 | 
			
		||||
#         try:
 | 
			
		||||
#             contacts2 = paginator2.page(page)
 | 
			
		||||
#         except (EmptyPage, InvalidPage):
 | 
			
		||||
#             contacts2 = paginator2.page(paginator2.num_pages)
 | 
			
		||||
#
 | 
			
		||||
#     return render_to_response('jperm/perm_list_ajax.html', locals())
 | 
			
		||||
 | 
			
		||||
    if tab == 'tab1':
 | 
			
		||||
        groups = contact_list = UserGroup.objects.filter(name__icontains=search).order_by('type')
 | 
			
		||||
        p = paginator = Paginator(contact_list, 10)
 | 
			
		||||
def perm_group_update(perm_id, user_group_id_list, asset_groups_id_list):
 | 
			
		||||
    perm = Perm.objects.filter(id=perm_id)
 | 
			
		||||
    if perm:
 | 
			
		||||
        perm = perm[0]
 | 
			
		||||
        user_group_list = []
 | 
			
		||||
        asset_group_list = []
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            page = int(request.GET.get('page', '1'))
 | 
			
		||||
        except ValueError:
 | 
			
		||||
            page = 1
 | 
			
		||||
        for user_group_id in user_group_id_list:
 | 
			
		||||
            user_group_list.extend(UserGroup.objects.filter(id=user_group_id))
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            contacts = paginator.page(page)
 | 
			
		||||
        except (EmptyPage, InvalidPage):
 | 
			
		||||
            contacts = paginator.page(paginator.num_pages)
 | 
			
		||||
        for asset_group_id in asset_groups_id_list:
 | 
			
		||||
            asset_group_list.extend(BisGroup.objects.filter(id=asset_group_id))
 | 
			
		||||
 | 
			
		||||
    else:
 | 
			
		||||
        users = contact_list2 = User.objects.filter(name__icontains=search).order_by('id')
 | 
			
		||||
        p2 = paginator2 = Paginator(contact_list2, 10)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            page = int(request.GET.get('page', '1'))
 | 
			
		||||
        except ValueError:
 | 
			
		||||
            page = 1
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            contacts2 = paginator2.page(page)
 | 
			
		||||
        except (EmptyPage, InvalidPage):
 | 
			
		||||
            contacts2 = paginator2.page(paginator2.num_pages)
 | 
			
		||||
 | 
			
		||||
    return render_to_response('jperm/perm_list_ajax.html', locals())
 | 
			
		||||
        perm.user_group.clear()
 | 
			
		||||
        perm.asset_group.clear()
 | 
			
		||||
        perm.user_group = user_group_list
 | 
			
		||||
        perm.asset_group = asset_group_list
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def perm_edit(request):
 | 
			
		||||
    if request.method == 'GET':
 | 
			
		||||
        header_title, path1, path2 = u'编辑授权', u'授权管理', u'授权编辑'
 | 
			
		||||
        perm_id = request.GET.get('id')
 | 
			
		||||
        perm_id = request.GET.get('id', '')
 | 
			
		||||
        perm = Perm.objects.filter(id=perm_id)
 | 
			
		||||
        if perm:
 | 
			
		||||
            perm = perm[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -142,16 +146,20 @@ def perm_edit(request):
 | 
			
		|||
            user_groups_select = perm.user_group.all()
 | 
			
		||||
            asset_groups_select = perm.asset_group.all()
 | 
			
		||||
 | 
			
		||||
            user_groups_all = UserGroup.objects.filter(Q(type='A') | Q(type='M'))
 | 
			
		||||
            user_groups_all = UserGroup.objects.all()
 | 
			
		||||
            asset_groups_all = BisGroup.objects.all()
 | 
			
		||||
 | 
			
		||||
            user_groups = [user_group for user_group in user_groups_all if user_group not in user_groups_select]
 | 
			
		||||
            asset_groups = [asset_group for asset_group in asset_groups_all if asset_group not in asset_groups_select]
 | 
			
		||||
    else:
 | 
			
		||||
        user_group_name = request.POST.get('user_group_name')
 | 
			
		||||
        asset_groups_selected = request.POST.getlist('asset_group_permed')
 | 
			
		||||
        perm_group_update(user_group_name=user_group_name, asset_groups_id=asset_groups_selected)
 | 
			
		||||
        return HttpResponseRedirect('/jperm/perm_list/', locals(), context_instance=RequestContext(request))
 | 
			
		||||
        perm_id = request.POST.get('perm_id', '')
 | 
			
		||||
        user_group_id_list = request.POST.getlist('user_groups_select')
 | 
			
		||||
        asset_group_id_list = request.POST.getlist('asset_groups_select')
 | 
			
		||||
        # return HttpResponse("perm_id: %s user_group: %s asset_group: %s" % (perm_id, repr(user_group_id_list), repr(asset_group_id_list) ))
 | 
			
		||||
        # return HttpResponse(perm_group_update(perm_id, user_group_id_list, asset_group_id_list))
 | 
			
		||||
        perm_group_update(perm_id, user_group_id_list, asset_group_id_list)
 | 
			
		||||
 | 
			
		||||
        return HttpResponseRedirect('/jperm/perm_list/')
 | 
			
		||||
    return render_to_response('jperm/perm_edit.html', locals(), context_instance=RequestContext(request))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
__author__ = 'guanghongwei'
 | 
			
		||||
 | 
			
		||||
from juser.models import User, UserGroup
 | 
			
		||||
from jasset.models import Asset, BisGroup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def user_perm_group_api(user):
 | 
			
		||||
    if user:
 | 
			
		||||
        perm_list = []
 | 
			
		||||
        user_group_all = user.group.all()
 | 
			
		||||
        for user_group in user_group_all:
 | 
			
		||||
            perm_list.extend(user_group.perm_set.all())
 | 
			
		||||
 | 
			
		||||
        asset_group_list = []
 | 
			
		||||
        for perm in perm_list:
 | 
			
		||||
            asset_group_list.extend(perm.asset_group.all())
 | 
			
		||||
 | 
			
		||||
        return asset_group_list
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def asset_perm_api(asset):
 | 
			
		||||
    if asset:
 | 
			
		||||
        perm_list = []
 | 
			
		||||
        asset_group_all = asset.bis_group.all()
 | 
			
		||||
        for asset_group in asset_group_all:
 | 
			
		||||
            perm_list.extend(asset_group.perm_set.all())
 | 
			
		||||
 | 
			
		||||
        user_group_list = []
 | 
			
		||||
        for perm in perm_list:
 | 
			
		||||
            user_group_list.extend(perm.user_group.all())
 | 
			
		||||
 | 
			
		||||
        user_permed_list = []
 | 
			
		||||
        for user_group in user_group_list:
 | 
			
		||||
            user_permed_list.extend(user_group.user_set.all())
 | 
			
		||||
        return user_permed_list
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,6 +47,14 @@ def groups_str(user_id):
 | 
			
		|||
        return "%s ..." % ' '.join(groups[0:2])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter(name='group_str2')
 | 
			
		||||
def groups_str2(group_list):
 | 
			
		||||
    if len(group_list) < 3:
 | 
			
		||||
        return ' '.join([group.name for group in group_list])
 | 
			
		||||
    else:
 | 
			
		||||
        return '%s ...' % ' '.join([group.name for group in group_list[0:2]])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter(name='group_manage_str')
 | 
			
		||||
def group_manage_str(username):
 | 
			
		||||
    user = User.objects.get(username=username)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ from connect import PyCrypt, KEY
 | 
			
		|||
from connect import BASE_DIR
 | 
			
		||||
from connect import CONF
 | 
			
		||||
from jumpserver.views import md5_crypt, LDAPMgmt, LDAP_ENABLE, ldap_conn, page_list_return
 | 
			
		||||
from jumpserver.api import user_perm_group_api
 | 
			
		||||
 | 
			
		||||
if LDAP_ENABLE:
 | 
			
		||||
    LDAP_HOST_URL = CONF.get('ldap', 'host_url')
 | 
			
		||||
| 
						 | 
				
			
			@ -553,6 +554,7 @@ def user_detail(request):
 | 
			
		|||
    user = User.objects.filter(id=user_id)
 | 
			
		||||
    if user:
 | 
			
		||||
        user = user[0]
 | 
			
		||||
        asset_group_permed = user_perm_group_api(user)
 | 
			
		||||
 | 
			
		||||
    return render_to_response('juser/user_detail.html', locals(), context_instance=RequestContext(request))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,7 @@
 | 
			
		|||
                            <th class="text-center"> 登录时间 </th>
 | 
			
		||||
                            <th class="text-center"> 退出时间 </th>
 | 
			
		||||
                            <th class="text-center"> 详情 </th>
 | 
			
		||||
                            <th class="text-center"> 有权限用户</th>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                    </thead>
 | 
			
		||||
                    <tbody>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +61,11 @@
 | 
			
		|||
                                <td class="text-center">
 | 
			
		||||
                                    <a class="log_command text-success" href="/jlog/history/?id={{ l.id }}">命令统计</a>
 | 
			
		||||
                                </td>
 | 
			
		||||
                                <td>
 | 
			
		||||
                                    {% for user in user_permed_list %}
 | 
			
		||||
                                        {{ user.name }}
 | 
			
		||||
                                    {% endfor %}
 | 
			
		||||
                                </td>
 | 
			
		||||
                            </tr>
 | 
			
		||||
                        {% endfor %}
 | 
			
		||||
                    </tbody>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@
 | 
			
		|||
                                <th>用户名</th>
 | 
			
		||||
                                <th>姓名</th>
 | 
			
		||||
                                <th>部门</th>
 | 
			
		||||
                                <th>属组</th>
 | 
			
		||||
                                <th>小组</th>
 | 
			
		||||
                            </tr>
 | 
			
		||||
                            </thead>
 | 
			
		||||
                            <tbody>
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +42,8 @@
 | 
			
		|||
                                    <tr>
 | 
			
		||||
                                        <td>{{ user.username }}</td>
 | 
			
		||||
                                        <td>{{ user.name }}</td>
 | 
			
		||||
                                        <td>{{ user.username|group_manage_str }}</td>
 | 
			
		||||
                                        <td>{{ user.username|groups_str }}</td>
 | 
			
		||||
                                        <td>{{ user.dept.name }}</td>
 | 
			
		||||
                                        <td>{{ user.group.all | group_str2 }}</td>
 | 
			
		||||
                                    </tr>
 | 
			
		||||
                                {% endfor %}
 | 
			
		||||
                            </tbody>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,7 @@
 | 
			
		|||
                                <label for="name" class="col-sm-2 control-label">授权名<span class="red-fonts">*</span></label>
 | 
			
		||||
                                <div class="col-sm-8">
 | 
			
		||||
                                    <input id="name" name="name" placeholder="授权名称" type="text" class="form-control" value="{{ name }}">
 | 
			
		||||
                                    <input id="perm_id" name="perm_id" placeholder="授权名称" type="text" class="form-control" style="display: none" value="{{ perm_id }}">
 | 
			
		||||
                                    <input id="perm_id" name="perm_id" style="display: none" value="{{ perm.id }}">
 | 
			
		||||
                                    <span class="help-block m-b-none">取个名字方便辨识</span>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +53,7 @@
 | 
			
		|||
                                    <div>
 | 
			
		||||
                                        <select id="user_groups" name="user_groups" class="form-control" size="5" multiple>
 | 
			
		||||
                                            {% for user_group in user_groups %}
 | 
			
		||||
                                            <option value="{{ user_group.id }}">{{ user_group.name }} --- {{ user_group.type|group_type_to_str }}</option>
 | 
			
		||||
                                            <option value="{{ user_group.id }}">{{ user_group.name }}</option>
 | 
			
		||||
                                            {% endfor %}
 | 
			
		||||
                                        </select>
 | 
			
		||||
                                    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@
 | 
			
		|||
                                    <div>
 | 
			
		||||
                                        <select id="user_groups_select" name="user_groups_select" class="form-control m-b" size="5"  multiple>
 | 
			
		||||
                                            {% for user_group in user_groups_select %}
 | 
			
		||||
                                            <option value="{{ user_group.id }}">{{ user_group.name }} --- {{ user_group.type|group_type_to_str }}</option>
 | 
			
		||||
                                            <option value="{{ user_group.id }}">{{ user_group.name }}</option>
 | 
			
		||||
                                            {% endfor %}
 | 
			
		||||
                                        </select>
 | 
			
		||||
                                    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -147,18 +147,6 @@ $('#sudoPerm').validator({
 | 
			
		|||
            tip: "输入授权名",
 | 
			
		||||
            ok: "",
 | 
			
		||||
            msg: {required: "必须填写!"}
 | 
			
		||||
        },
 | 
			
		||||
        "user_groups_select": {
 | 
			
		||||
            rule: "required",
 | 
			
		||||
            tip: "选择用户组",
 | 
			
		||||
            ok: "",
 | 
			
		||||
            msg: {checked: "至少选择一个用户组"}
 | 
			
		||||
        },
 | 
			
		||||
        "asset_groups_select": {
 | 
			
		||||
            rule: "required",
 | 
			
		||||
            tip: "选择主机组",
 | 
			
		||||
            ok: "",
 | 
			
		||||
            msg: {checked: "至少选择一个主机组"}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +158,11 @@ $('#sudoPerm').validator({
 | 
			
		|||
 | 
			
		||||
$(document).ready(function(){
 | 
			
		||||
    $("#submit_button").click(function(){
 | 
			
		||||
        $('#users_selected option').each(function(){
 | 
			
		||||
        $('#user_groups_select option').each(function(){
 | 
			
		||||
            $(this).prop('selected', true)
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        $('#asset_groups_select option').each(function(){
 | 
			
		||||
            $(this).prop('selected', true)
 | 
			
		||||
        })
 | 
			
		||||
    })
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,8 +33,7 @@
 | 
			
		|||
                        <div class="panel-heading">
 | 
			
		||||
                            <div class="panel-options">
 | 
			
		||||
                                <ul class="nav nav-tabs">
 | 
			
		||||
                                    <li id="tab1" class="active"><a data-toggle="tab" href="#tab-1">授权查看</a></li>
 | 
			
		||||
                                    <li id="tab2" class=""><a data-toggle="tab" href="#tab-2">用户授权详情</a></li>
 | 
			
		||||
                                    <li id="tab1" class="active"><a  href="/jperm/perm_list/">授权查看</a></li>
 | 
			
		||||
                                    <li style="float: right">
 | 
			
		||||
                                        <form method="get" action="" class="pull-right mail-search">
 | 
			
		||||
                                            <div class="input-group">
 | 
			
		||||
| 
						 | 
				
			
			@ -70,14 +69,10 @@
 | 
			
		|||
                                            <tr class="gradeX">
 | 
			
		||||
                                                <td class="text-center"> {{ perm.name }} </td>
 | 
			
		||||
                                                <td class="text-center">
 | 
			
		||||
                                                    {% for user_group in perm.user_group.all %}
 | 
			
		||||
                                                        {{ user_group.name }}
 | 
			
		||||
                                                    {% endfor %}
 | 
			
		||||
                                                    {{  perm.user_group.all | group_str2 }}
 | 
			
		||||
                                                </td>
 | 
			
		||||
                                                <td class="text-center">
 | 
			
		||||
                                                    {% for asset_group in perm.asset_group.all %}
 | 
			
		||||
                                                        {{ asset_group.name }}
 | 
			
		||||
                                                    {% endfor %}
 | 
			
		||||
                                                    {{ perm.asset_group.all | group_str2 }}
 | 
			
		||||
                                                </td>
 | 
			
		||||
                                                <td class="text-center"> {{ perm.comment }} </td>
 | 
			
		||||
                                                <td class="text-center">
 | 
			
		||||
| 
						 | 
				
			
			@ -129,79 +124,77 @@
 | 
			
		|||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
 | 
			
		||||
                                <div id="tab-2" class="tab-pane">
 | 
			
		||||
                                    <table class="table table-striped table-bordered table-hover " id="editable" >
 | 
			
		||||
                                        <thead>
 | 
			
		||||
                                            <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>
 | 
			
		||||
                                            </tr>
 | 
			
		||||
                                        </thead>
 | 
			
		||||
                                        <tbody id="perm_list">
 | 
			
		||||
                                        {% for user in contacts2.object_list %}
 | 
			
		||||
                                            <tr class="gradeX">
 | 
			
		||||
                                                <td class="text-center"> {{ user.name }} </td>
 | 
			
		||||
                                                <td class="text-center"> {{ user.id | get_role }} </td>
 | 
			
		||||
                                                <td class="text-center"> {{ user.username | groups_str }} </td>
 | 
			
		||||
                                                <td class="text-center"> {{ user.id | perm_asset_count }} </td>
 | 
			
		||||
                                                <td class="text-center">
 | 
			
		||||
                                                    <a title="[ {{ user.name }} ] 授权详情" href="#" class="btn btn-xs btn-primary">详情</a>
 | 
			
		||||
                                                </td>
 | 
			
		||||
                                            </tr>
 | 
			
		||||
                                        {% endfor %}
 | 
			
		||||
                                        </tbody>
 | 
			
		||||
                                    </table>
 | 
			
		||||
                                    <div class="row">
 | 
			
		||||
                                        <div class="col-sm-6">
 | 
			
		||||
                                            <div class="dataTables_info" id="editable_info" role="status" aria-live="polite">
 | 
			
		||||
                                                Showing {{ contacts2.start_index }} to {{ contacts2.end_index }} of {{ p2.count }} entries
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                        <div class="col-sm-6">
 | 
			
		||||
                                            <div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
 | 
			
		||||
                                                <ul class="pagination" style="margin-top: 0; float: right">
 | 
			
		||||
                                                    {% if contacts2.has_previous %}
 | 
			
		||||
                                                        <li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
 | 
			
		||||
                                                            <a href="?page={{ contacts2.previous_page_number }}">Previous</a>
 | 
			
		||||
                                                        </li>
 | 
			
		||||
                                                    {% else %}
 | 
			
		||||
                                                        <li class="paginate_button previous disabled" aria-controls="editable" tabindex="0" id="editable_previous">
 | 
			
		||||
                                                             <a href="#">Previous</a>
 | 
			
		||||
                                                        </li>
 | 
			
		||||
                                                    {% endif %}
 | 
			
		||||
                                                    {% for page in page_range2 %}
 | 
			
		||||
                                                        {% ifequal current_page page %}
 | 
			
		||||
                                                            <li class="paginate_button active"  aria-controls="editable" tabindex="0"><a href="?page={{ page }}"  title="第{{ page }}页">{{ page }}</a></li>
 | 
			
		||||
                                                        {% else %}
 | 
			
		||||
                                                            <li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}"  title="第{{ page }}页">{{ page }}</a></li>
 | 
			
		||||
                                                        {% endifequal %}
 | 
			
		||||
                                                    {% endfor %}
 | 
			
		||||
                                                    {% if contacts2.has_next %}
 | 
			
		||||
                                                        <li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
 | 
			
		||||
                                                            <a href="?page={{ contacts2.next_page_number }}">Next</a>
 | 
			
		||||
                                                        </li>
 | 
			
		||||
                                                    {% else %}
 | 
			
		||||
                                                        <li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
 | 
			
		||||
                                                            <a href="#">Next</a>
 | 
			
		||||
                                                        </li>
 | 
			
		||||
                                                    {% endif %}
 | 
			
		||||
                                                </ul>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
 | 
			
		||||
                                </div>
 | 
			
		||||
{#                                <div id="tab-2" class="tab-pane">#}
 | 
			
		||||
{#                                    <table class="table table-striped table-bordered table-hover " id="editable" >#}
 | 
			
		||||
{#                                        <thead>#}
 | 
			
		||||
{#                                            <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>#}
 | 
			
		||||
{#                                            </tr>#}
 | 
			
		||||
{#                                        </thead>#}
 | 
			
		||||
{#                                        <tbody id="perm_list">#}
 | 
			
		||||
{#                                        {% for user in contacts2.object_list %}#}
 | 
			
		||||
{#                                            <tr class="gradeX">#}
 | 
			
		||||
{#                                                <td class="text-center"> {{ user.name }} </td>#}
 | 
			
		||||
{#                                                <td class="text-center"> {{ user.id | get_role }} </td>#}
 | 
			
		||||
{#                                                <td class="text-center"> {{ user.username | groups_str }} </td>#}
 | 
			
		||||
{#                                                <td class="text-center"> {{ user.id | perm_asset_count }} </td>#}
 | 
			
		||||
{#                                                <td class="text-center">#}
 | 
			
		||||
{#                                                    <a title="[ {{ user.name }} ] 授权详情" href="#" class="btn btn-xs btn-primary">详情</a>#}
 | 
			
		||||
{#                                                </td>#}
 | 
			
		||||
{#                                            </tr>#}
 | 
			
		||||
{#                                        {% endfor %}#}
 | 
			
		||||
{#                                        </tbody>#}
 | 
			
		||||
{#                                    </table>#}
 | 
			
		||||
{#                                    <div class="row">#}
 | 
			
		||||
{#                                        <div class="col-sm-6">#}
 | 
			
		||||
{#                                            <div class="dataTables_info" id="editable_info" role="status" aria-live="polite">#}
 | 
			
		||||
{#                                                Showing {{ contacts2.start_index }} to {{ contacts2.end_index }} of {{ p2.count }} entries#}
 | 
			
		||||
{#                                            </div>#}
 | 
			
		||||
{#                                        </div>#}
 | 
			
		||||
{#                                        <div class="col-sm-6">#}
 | 
			
		||||
{#                                            <div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">#}
 | 
			
		||||
{#                                                <ul class="pagination" style="margin-top: 0; float: right">#}
 | 
			
		||||
{#                                                    {% if contacts2.has_previous %}#}
 | 
			
		||||
{#                                                        <li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">#}
 | 
			
		||||
{#                                                            <a href="?page={{ contacts2.previous_page_number }}">Previous</a>#}
 | 
			
		||||
{#                                                        </li>#}
 | 
			
		||||
{#                                                    {% else %}#}
 | 
			
		||||
{#                                                        <li class="paginate_button previous disabled" aria-controls="editable" tabindex="0" id="editable_previous">#}
 | 
			
		||||
{#                                                             <a href="#">Previous</a>#}
 | 
			
		||||
{#                                                        </li>#}
 | 
			
		||||
{#                                                    {% endif %}#}
 | 
			
		||||
{#                                                    {% for page in page_range2 %}#}
 | 
			
		||||
{#                                                        {% ifequal current_page page %}#}
 | 
			
		||||
{#                                                            <li class="paginate_button active"  aria-controls="editable" tabindex="0"><a href="?page={{ page }}"  title="第{{ page }}页">{{ page }}</a></li>#}
 | 
			
		||||
{#                                                        {% else %}#}
 | 
			
		||||
{#                                                            <li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}"  title="第{{ page }}页">{{ page }}</a></li>#}
 | 
			
		||||
{#                                                        {% endifequal %}#}
 | 
			
		||||
{#                                                    {% endfor %}#}
 | 
			
		||||
{#                                                    {% if contacts2.has_next %}#}
 | 
			
		||||
{#                                                        <li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">#}
 | 
			
		||||
{#                                                            <a href="?page={{ contacts2.next_page_number }}">Next</a>#}
 | 
			
		||||
{#                                                        </li>#}
 | 
			
		||||
{#                                                    {% else %}#}
 | 
			
		||||
{#                                                        <li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">#}
 | 
			
		||||
{#                                                            <a href="#">Next</a>#}
 | 
			
		||||
{#                                                        </li>#}
 | 
			
		||||
{#                                                    {% endif %}#}
 | 
			
		||||
{#                                                </ul>#}
 | 
			
		||||
{#                                            </div>#}
 | 
			
		||||
{#                                        </div>#}
 | 
			
		||||
{#                                    </div>#}
 | 
			
		||||
{##}
 | 
			
		||||
{#                                </div>#}
 | 
			
		||||
                            </div>
 | 
			
		||||
 | 
			
		||||
                        </div>
 | 
			
		||||
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,6 +71,14 @@
 | 
			
		|||
                            <td class="text-center">最后登录</td>
 | 
			
		||||
                            <td class="text-center">{{ user.last_login }}</td>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                        <tr class="gradeX">
 | 
			
		||||
                            <td class="text-center">授权主机组</td>
 | 
			
		||||
                            <td class="text-center">
 | 
			
		||||
                                {% for asset_group in asset_group_permed %}
 | 
			
		||||
                                    {{ asset_group.name }}
 | 
			
		||||
                                {% endfor %}
 | 
			
		||||
                            </td>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                    </table>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,7 +68,7 @@
 | 
			
		|||
                                <td class="text-center"> {{ user.username }} </td>
 | 
			
		||||
                                <td class="text-center"> {{ user.name }} </td>
 | 
			
		||||
                                <td class="text-center"> {{ user.dept.name }} </td>
 | 
			
		||||
                                <td class="text-center"> {{ user.id | groups_str }} </td>
 | 
			
		||||
                                <td class="text-center"> {{ user.group.all | group_str2  }} </td>
 | 
			
		||||
                                <td class="text-center"> {{ user.id | get_role }}</td>
 | 
			
		||||
                                <td class="text-center">{{ user.is_active|bool2str }}</td>
 | 
			
		||||
                                <td class="text-center">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue