mirror of https://github.com/jumpserver/jumpserver
修改sudo授权
parent
c113035d3d
commit
75979e3999
|
@ -11,21 +11,14 @@ class Perm(models.Model):
|
|||
return '%s_%s' % (self.user_group.name, self.asset_group.name)
|
||||
|
||||
|
||||
class CMD(models.Model):
|
||||
cmd = models.CharField(max_length=200)
|
||||
|
||||
|
||||
class CmdGroup(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
cmd = models.ForeignKey(CMD)
|
||||
cmd = models.CharField(max_length=999)
|
||||
comment = models.CharField(blank=True, null=True, max_length=50)
|
||||
|
||||
|
||||
class SudoPerm(models.Model):
|
||||
user = models.CharField(max_length=100)
|
||||
is_user_group = models.BooleanField(default=False)
|
||||
asset = models.CharField(max_length=100)
|
||||
is_asset_group = models.BooleanField(default=False)
|
||||
cmd = models.CharField(max_length=200)
|
||||
is_cmd_group = models.BooleanField(default=False)
|
||||
|
||||
user_group = models.ManyToManyField(UserGroup)
|
||||
asset_group = models.ManyToManyField(BisGroup)
|
||||
cmd_group = models.ManyToManyField(CmdGroup)
|
||||
comment = models.CharField(max_length=30)
|
|
@ -12,4 +12,5 @@ urlpatterns = patterns('jperm.views',
|
|||
(r'^perm_detail/$', 'perm_detail'),
|
||||
(r'^perm_del/$', 'perm_del'),
|
||||
(r'^perm_asset_detail/$', 'perm_asset_detail'),
|
||||
(r'^sudo_list/$', 'sudo_list'),
|
||||
)
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.shortcuts import render_to_response
|
|||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
from juser.models import User, UserGroup
|
||||
from jasset.models import Asset, BisGroup
|
||||
from jperm.models import Perm
|
||||
from jperm.models import Perm, SudoPerm
|
||||
from django.core.paginator import Paginator, EmptyPage, InvalidPage
|
||||
|
||||
|
||||
|
@ -137,3 +137,23 @@ def perm_asset_detail(request):
|
|||
return render_to_response('jperm/perm_asset_detail.html', locals())
|
||||
|
||||
|
||||
def sudo_list(request):
|
||||
header_title, path1, path2 = u'Sudo授权 | Perm Sudo Detail.', u'jperm', u'sudo_list'
|
||||
sudo_perms = contact_list = SudoPerm.objects.all()
|
||||
users = contact_list2 = User.objects.all().order_by('id')
|
||||
p = paginator = Paginator(contact_list, 10)
|
||||
p2 = paginator2 = Paginator(contact_list2, 10)
|
||||
try:
|
||||
page = int(request.GET.get('page', '1'))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
try:
|
||||
contacts = paginator.page(page)
|
||||
contacts2 = paginator2.page(page)
|
||||
except (EmptyPage, InvalidPage):
|
||||
contacts = paginator.page(paginator.num_pages)
|
||||
contacts2 = paginator2.page(paginator2.num_pages)
|
||||
return render_to_response('jperm/sudo_list.html', locals())
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,242 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load mytags %}
|
||||
{% block content %}
|
||||
{% include 'nav_cat_bar.html' %}
|
||||
|
||||
<div class="wrapper wrapper-content animated fadeInRight">
|
||||
<div class="row">
|
||||
<div class="col-lg-10">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5> Sudo授权 <small> show sudo perm info.</small> </h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-user">
|
||||
<li><a href="#">未启用 1</a>
|
||||
</li>
|
||||
<li><a href="#">未启用 2</a>
|
||||
</li>
|
||||
</ul>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ibox-content">
|
||||
<div class="panel blank-panel">
|
||||
<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 style="float: right">
|
||||
<form method="get" action="" class="pull-right mail-search">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
|
||||
<div class="input-group-btn">
|
||||
<button id='search_btn' type="button" class="btn btn-sm btn-primary">
|
||||
Search
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="tab-content">
|
||||
<div id="tab-1" class="tab-pane active">
|
||||
<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>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="perm_edit">
|
||||
{% for sudo_perm in contacts.object_list %}
|
||||
<tr class="gradeX">
|
||||
<td class="text-center">
|
||||
{% for user_group in sudo_perm.user_group %}
|
||||
{{ user_group.name }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% for asset_group in sudo_perm.asset_group %}
|
||||
{{ asset_group.name }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% for cmd_group in sudo_perm.cmd_group %}
|
||||
{{ cmd_group.name }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a title="[ {{ group.name }} 授权详情 ]" href="../perm_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||
<a href="../perm_edit/?id={{ group.id }}" class="btn btn-xs btn-info">编辑</a>
|
||||
<a href="../perm_del/?id={{ group.id }}" class="btn btn-xs btn-danger">删除</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 {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.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 contacts.has_previous %}
|
||||
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
|
||||
<a href="?page={{ contacts.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 p.page_range %}
|
||||
{% ifequal offset1 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 contacts.has_next %}
|
||||
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
|
||||
<a href="?page={{ contacts.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="../perm_asset_detail/?id={{ user.id }}" class="iframe 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 p2.page_range %}
|
||||
{% ifequal offset1 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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
$('#search_btn').click(function(){
|
||||
if ($('#tab2').attr('class') == 'active'){
|
||||
var tab='tab2'
|
||||
} else {
|
||||
var tab='tab1'
|
||||
}
|
||||
|
||||
var search=$('#search_input').val()
|
||||
|
||||
$.post('/jperm/perm_list_ajax/',
|
||||
{'tab': tab, 'search': search},
|
||||
function(data){
|
||||
if ($('#tab2').attr('class') == 'active'){
|
||||
$('#tab-2').html(data)
|
||||
} else {
|
||||
$('#tab-1').html(data)
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
|
@ -33,7 +33,7 @@
|
|||
<a href="#"><i class="fa fa-edit"></i> <span class="nav-label">授权管理</span><span class="fa arrow"></span></a>
|
||||
<ul class="nav nav-second-level">
|
||||
<li id="perm_list"><a href="/jperm/perm_list/">主机授权</a></li>
|
||||
<li id="perm_sudo"><a href="/jperm/perm_sudo/">Sudo授权</a></li>
|
||||
<li id="perm_sudo"><a href="/jperm/sudo_list/">Sudo授权</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li id="jlog">
|
||||
|
|
Loading…
Reference in New Issue