mirror of https://github.com/jumpserver/jumpserver
to Commpany
parent
72ad4b44ce
commit
d8a229c09b
|
@ -17,6 +17,7 @@ class AssetViewSet(viewsets.ModelViewSet):
|
||||||
"""API endpoint that allows Asset to be viewed or edited."""
|
"""API endpoint that allows Asset to be viewed or edited."""
|
||||||
queryset = Asset.objects.all()
|
queryset = Asset.objects.all()
|
||||||
serializer_class = serializers.AssetSerializer
|
serializer_class = serializers.AssetSerializer
|
||||||
|
filter_fields = ('id', 'ip', 'hostname')
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = super(AssetViewSet, self).get_queryset()
|
queryset = super(AssetViewSet, self).get_queryset()
|
||||||
|
@ -27,7 +28,6 @@ class AssetViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
if asset_group_id:
|
if asset_group_id:
|
||||||
queryset = queryset.filter(groups__id=asset_group_id)
|
queryset = queryset.filter(groups__id=asset_group_id)
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -272,7 +272,7 @@ REST_FRAMEWORK = {
|
||||||
'rest_framework.authentication.BasicAuthentication',
|
'rest_framework.authentication.BasicAuthentication',
|
||||||
'rest_framework.authentication.SessionAuthentication',
|
'rest_framework.authentication.SessionAuthentication',
|
||||||
),
|
),
|
||||||
'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',),
|
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Custom User Auth model
|
# Custom User Auth model
|
||||||
|
|
|
@ -214,9 +214,7 @@ function APIUpdateAttr(props) {
|
||||||
|
|
||||||
// Sweet Alert for Delete
|
// Sweet Alert for Delete
|
||||||
function objectDelete(obj, name, url) {
|
function objectDelete(obj, name, url) {
|
||||||
var $this = $(this);
|
|
||||||
function doDelete() {
|
function doDelete() {
|
||||||
var uid = $this.data('uid');
|
|
||||||
var body = {};
|
var body = {};
|
||||||
var success = function() {
|
var success = function() {
|
||||||
swal('Deleted!', "[ "+name+"]"+" has been deleted ", "success");
|
swal('Deleted!', "[ "+name+"]"+" has been deleted ", "success");
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
import json
|
||||||
|
|
||||||
from rest_framework import filters
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -12,6 +12,7 @@ from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView, BulkModelViewSet
|
from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView, BulkModelViewSet
|
||||||
from rest_framework import authentication
|
from rest_framework import authentication
|
||||||
|
import django_filters
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
|
||||||
from common.mixins import BulkDeleteApiMixin
|
from common.mixins import BulkDeleteApiMixin
|
||||||
|
@ -26,12 +27,28 @@ from . import serializers
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class IDInFilter(django_filters.rest_framework.FilterSet):
|
||||||
|
id__in = django_filters.CharFilter(method='in_filter')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
fields = ['id__in']
|
||||||
|
|
||||||
|
def in_filter(self, queryset, name, value):
|
||||||
|
try:
|
||||||
|
value = json.loads(value)
|
||||||
|
except ValueError:
|
||||||
|
value = []
|
||||||
|
return queryset.filter(**{name+'__in': value})
|
||||||
|
|
||||||
|
|
||||||
class UserViewSet(BulkModelViewSet):
|
class UserViewSet(BulkModelViewSet):
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
serializer_class = serializers.UserSerializer
|
serializer_class = serializers.UserSerializer
|
||||||
permission_classes = (IsSuperUser,)
|
permission_classes = (IsSuperUser,)
|
||||||
filter_backends = (DjangoFilterBackend,)
|
filter_backends = (DjangoFilterBackend,)
|
||||||
# filter_fields = ('username', 'email', 'name', 'id')
|
filter_fields = ('username', 'email', 'name', 'id')
|
||||||
|
filter_class = IDInFilter
|
||||||
ordering_fields = ('username', 'email')
|
ordering_fields = ('username', 'email')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
<option value="delete">{% trans 'Delete selected' %}</option>
|
<option value="delete">{% trans 'Delete selected' %}</option>
|
||||||
<option value="update">{% trans 'Update selected' %}</option>
|
<option value="update">{% trans 'Update selected' %}</option>
|
||||||
<option value="deactive">{% trans 'Deactive selected' %}</option>
|
<option value="deactive">{% trans 'Deactive selected' %}</option>
|
||||||
|
<option value="active">{% trans 'Active selected' %}</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="input-group-btn pull-left" style="padding-left: 5px;">
|
<div class="input-group-btn pull-left" style="padding-left: 5px;">
|
||||||
<button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-primary">
|
<button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-primary">
|
||||||
|
@ -75,7 +76,9 @@ $(document).ready(function(){
|
||||||
}},
|
}},
|
||||||
{targets: 6, createdCell: function (td, cellData, rowData) {
|
{targets: 6, createdCell: function (td, cellData, rowData) {
|
||||||
var update_btn = '<a href="{% url "users:user-update" pk=99991937 %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
|
var update_btn = '<a href="{% url "users:user-update" pk=99991937 %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'.replace('99991937', cellData);
|
||||||
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_user_delete" data-uid="99991937">{% trans "Delete" %}</a>'.replace('99991937', cellData);
|
var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_user_delete" data-uid="99991937" data-name="99991938">{% trans "Delete" %}</a>'
|
||||||
|
.replace('99991937', cellData)
|
||||||
|
.replace('99991938', rowData.name);
|
||||||
if (rowData.id === 1 || rowData.username == "admin") {
|
if (rowData.id === 1 || rowData.username == "admin") {
|
||||||
$(td).html(update_btn)
|
$(td).html(update_btn)
|
||||||
} else {
|
} else {
|
||||||
|
@ -150,6 +153,14 @@ $(document).ready(function(){
|
||||||
$data_table.ajax.reload();
|
$data_table.ajax.reload();
|
||||||
jumpserver.checked = false;
|
jumpserver.checked = false;
|
||||||
}
|
}
|
||||||
|
function doActive() {
|
||||||
|
var body = $.each(id_list, function(index, user_object) {
|
||||||
|
user_object['is_active'] = true;
|
||||||
|
});
|
||||||
|
APIUpdateAttr({url: the_url, method: 'PATCH', body: JSON.stringify(body)});
|
||||||
|
$data_table.ajax.reload();
|
||||||
|
jumpserver.checked = false;
|
||||||
|
}
|
||||||
function doDelete() {
|
function doDelete() {
|
||||||
swal({
|
swal({
|
||||||
title: "{% trans 'Are you sure?' %}",
|
title: "{% trans 'Are you sure?' %}",
|
||||||
|
@ -187,43 +198,18 @@ $(document).ready(function(){
|
||||||
case 'update':
|
case 'update':
|
||||||
doUpdate();
|
doUpdate();
|
||||||
break;
|
break;
|
||||||
|
case 'active':
|
||||||
|
doActive();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}).on('click', '.btn_user_delete', function(){
|
}).on('click', '.btn_user_delete', function(){
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
function doDelete() {
|
var name = $this.data('name');
|
||||||
var uid = $this.data('uid');
|
var uid = $this.data('uid');
|
||||||
var the_url = '{% url "api-users:user-detail" pk=99991937 %}'.replace('99991937', uid);
|
var the_url = '{% url "api-users:user-detail" pk=99991937 %}'.replace('99991937', uid);
|
||||||
var body = {};
|
objectDelete($this, name, the_url);
|
||||||
var success = function() {
|
|
||||||
var msg = "{% trans 'User Deleted.' %}";
|
|
||||||
swal("{% trans 'User Delete' %}", msg, "success");
|
|
||||||
$('#user_list_table').DataTable().ajax.reload();
|
|
||||||
};
|
|
||||||
var fail = function() {
|
|
||||||
var msg = "{% trans 'User Deleting failed.' %}";
|
|
||||||
swal("{% trans 'User Delete' %}", msg, "error");
|
|
||||||
};
|
|
||||||
APIUpdateAttr({
|
|
||||||
url: the_url,
|
|
||||||
body: JSON.stringify(body),
|
|
||||||
method: 'DELETE',
|
|
||||||
success: success,
|
|
||||||
error: fail
|
|
||||||
});
|
|
||||||
}
|
|
||||||
swal({
|
|
||||||
title: "{% trans 'Are you sure?' %}",
|
|
||||||
text: "{% trans 'This will delete the selected user.' %}",
|
|
||||||
type: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#DD6B55",
|
|
||||||
confirmButtonText: "{% trans 'Confirm' %}",
|
|
||||||
closeOnConfirm: false
|
|
||||||
}, function() {
|
|
||||||
doDelete();
|
|
||||||
});
|
|
||||||
}).on('click', '#btn_user_bulk_update', function(){
|
}).on('click', '#btn_user_bulk_update', function(){
|
||||||
var json_data = $('#fm_user_bulk_update').serializeObject();
|
var json_data = $('#fm_user_bulk_update').serializeObject();
|
||||||
var body = {};
|
var body = {};
|
||||||
|
@ -237,7 +223,7 @@ $(document).ready(function(){
|
||||||
if (typeof body.groups === 'string') {
|
if (typeof body.groups === 'string') {
|
||||||
body.groups = [parseInt(body.groups)]
|
body.groups = [parseInt(body.groups)]
|
||||||
} else if(typeof body.groups === 'array') {
|
} else if(typeof body.groups === 'array') {
|
||||||
new_groups = body.groups.map(Number);
|
var new_groups = body.groups.map(Number);
|
||||||
body.groups = new_groups;
|
body.groups = new_groups;
|
||||||
}
|
}
|
||||||
var $data_table = $('#user_list_table').DataTable();
|
var $data_table = $('#user_list_table').DataTable();
|
||||||
|
|
Loading…
Reference in New Issue