Commit 54461964 authored by ibuler's avatar ibuler

[Bugfix] #695 Asset detail add or delete system user or group mixed

parent 0f9ae9ef
...@@ -14,18 +14,14 @@ ...@@ -14,18 +14,14 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from rest_framework import viewsets, generics, mixins from rest_framework import generics
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework_bulk import BulkModelViewSet
from rest_framework_bulk import BulkModelViewSet, BulkDestroyAPIView from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework_bulk import BulkListSerializer, BulkSerializerMixin, ListBulkCreateUpdateDestroyAPIView
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from common.mixins import IDInFilterMixin from common.mixins import IDInFilterMixin
from common.utils import get_object_or_none, signer from common.utils import get_object_or_none
from .hands import IsSuperUser, IsAppUser, IsValidUser, \ from .hands import IsSuperUser, IsAppUser, IsValidUser, \
get_user_granted_assets, push_users get_user_granted_assets, push_users
from .models import AssetGroup, Asset, IDC, SystemUser, AdminUser from .models import AssetGroup, Asset, IDC, SystemUser, AdminUser
...@@ -61,54 +57,66 @@ class AssetViewSet(IDInFilterMixin, BulkModelViewSet): ...@@ -61,54 +57,66 @@ class AssetViewSet(IDInFilterMixin, BulkModelViewSet):
class AssetGroupViewSet(IDInFilterMixin, BulkModelViewSet): class AssetGroupViewSet(IDInFilterMixin, BulkModelViewSet):
"""Asset group api set, for add,delete,update,list,retrieve resource"""
queryset = AssetGroup.objects.all() queryset = AssetGroup.objects.all()
serializer_class = serializers.AssetGroupSerializer serializer_class = serializers.AssetGroupSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class AssetUpdateGroupApi(generics.RetrieveUpdateAPIView): class AssetUpdateGroupApi(generics.RetrieveUpdateAPIView):
"""Asset update it's group api"""
queryset = Asset.objects.all() queryset = Asset.objects.all()
serializer_class = serializers.AssetUpdateGroupSerializer serializer_class = serializers.AssetUpdateGroupSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class AssetGroupUpdateApi(generics.RetrieveUpdateAPIView): class AssetGroupUpdateApi(generics.RetrieveUpdateAPIView):
"""Asset group, update it's asset member"""
queryset = AssetGroup.objects.all() queryset = AssetGroup.objects.all()
serializer_class = serializers.AssetGroupUpdateSerializer serializer_class = serializers.AssetGroupUpdateSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class AssetGroupUpdateSystemUserApi(generics.RetrieveUpdateAPIView): class AssetGroupUpdateSystemUserApi(generics.RetrieveUpdateAPIView):
"""Asset group push system user"""
queryset = AssetGroup.objects.all() queryset = AssetGroup.objects.all()
serializer_class = serializers.AssetGroupUpdateSystemUserSerializer serializer_class = serializers.AssetGroupUpdateSystemUserSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class IDCUpdateAssetsApi(generics.RetrieveUpdateAPIView): class IDCUpdateAssetsApi(generics.RetrieveUpdateAPIView):
"""IDC update asset member"""
queryset = IDC.objects.all() queryset = IDC.objects.all()
serializer_class = serializers.IDCUpdateAssetsSerializer serializer_class = serializers.IDCUpdateAssetsSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class IDCViewSet(IDInFilterMixin, BulkModelViewSet): class IDCViewSet(IDInFilterMixin, BulkModelViewSet):
"""IDC api set, for add,delete,update,list,retrieve resource"""
queryset = IDC.objects.all() queryset = IDC.objects.all()
serializer_class = serializers.IDCSerializer serializer_class = serializers.IDCSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class AdminUserViewSet(IDInFilterMixin, BulkModelViewSet): class AdminUserViewSet(IDInFilterMixin, BulkModelViewSet):
"""Admin user api set, for add,delete,update,list,retrieve resource"""
queryset = AdminUser.objects.all() queryset = AdminUser.objects.all()
serializer_class = serializers.AdminUserSerializer serializer_class = serializers.AdminUserSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class SystemUserViewSet(IDInFilterMixin, BulkModelViewSet): class SystemUserViewSet(IDInFilterMixin, BulkModelViewSet):
"""System user api set, for add,delete,update,list,retrieve resource"""
queryset = SystemUser.objects.all() queryset = SystemUser.objects.all()
serializer_class = serializers.SystemUserSerializer serializer_class = serializers.SystemUserSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class SystemUserUpdateApi(generics.RetrieveUpdateAPIView): class SystemUserUpdateApi(generics.RetrieveUpdateAPIView):
"""Asset update it's system user
when update then push system user to asset.
"""
queryset = Asset.objects.all() queryset = Asset.objects.all()
serializer_class = serializers.AssetUpdateSystemUserSerializer serializer_class = serializers.AssetUpdateSystemUserSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
...@@ -125,24 +133,28 @@ class SystemUserUpdateApi(generics.RetrieveUpdateAPIView): ...@@ -125,24 +133,28 @@ class SystemUserUpdateApi(generics.RetrieveUpdateAPIView):
class SystemUserUpdateAssetsApi(generics.RetrieveUpdateAPIView): class SystemUserUpdateAssetsApi(generics.RetrieveUpdateAPIView):
"""System user update it's assets"""
queryset = SystemUser.objects.all() queryset = SystemUser.objects.all()
serializer_class = serializers.SystemUserUpdateAssetsSerializer serializer_class = serializers.SystemUserUpdateAssetsSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class SystemUserUpdateAssetGroupApi(generics.RetrieveUpdateAPIView): class SystemUserUpdateAssetGroupApi(generics.RetrieveUpdateAPIView):
"""System user update asset group"""
queryset = SystemUser.objects.all() queryset = SystemUser.objects.all()
serializer_class = serializers.SystemUserUpdateAssetGroupSerializer serializer_class = serializers.SystemUserUpdateAssetGroupSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class AssetListUpdateApi(IDInFilterMixin, ListBulkCreateUpdateDestroyAPIView): class AssetListUpdateApi(IDInFilterMixin, ListBulkCreateUpdateDestroyAPIView):
"""Asset bulk update api"""
queryset = Asset.objects.all() queryset = Asset.objects.all()
serializer_class = serializers.AssetSerializer serializer_class = serializers.AssetSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
class SystemUserAuthInfoApi(generics.RetrieveAPIView): class SystemUserAuthInfoApi(generics.RetrieveAPIView):
"""Get system user auth info"""
queryset = SystemUser.objects.all() queryset = SystemUser.objects.all()
permission_classes = (IsAppUser,) permission_classes = (IsAppUser,)
...@@ -160,6 +172,7 @@ class SystemUserAuthInfoApi(generics.RetrieveAPIView): ...@@ -160,6 +172,7 @@ class SystemUserAuthInfoApi(generics.RetrieveAPIView):
class AssetRefreshHardwareView(generics.RetrieveAPIView): class AssetRefreshHardwareView(generics.RetrieveAPIView):
"""Refresh asset hardware info"""
queryset = Asset.objects.all() queryset = Asset.objects.all()
serializer_class = serializers.AssetSerializer serializer_class = serializers.AssetSerializer
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
...@@ -175,6 +188,7 @@ class AssetRefreshHardwareView(generics.RetrieveAPIView): ...@@ -175,6 +188,7 @@ class AssetRefreshHardwareView(generics.RetrieveAPIView):
class AssetAdminUserTestView(AssetRefreshHardwareView): class AssetAdminUserTestView(AssetRefreshHardwareView):
"""Test asset admin user connectivity"""
queryset = Asset.objects.all() queryset = Asset.objects.all()
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
...@@ -189,6 +203,7 @@ class AssetAdminUserTestView(AssetRefreshHardwareView): ...@@ -189,6 +203,7 @@ class AssetAdminUserTestView(AssetRefreshHardwareView):
class AssetGroupPushSystemUserView(generics.UpdateAPIView): class AssetGroupPushSystemUserView(generics.UpdateAPIView):
"""Asset group push system user api"""
queryset = AssetGroup.objects.all() queryset = AssetGroup.objects.all()
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
serializer_class = serializers.AssetSerializer serializer_class = serializers.AssetSerializer
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
{% load i18n %} {% load i18n %}
{% block custom_head_css_js %} {% block custom_head_css_js %}
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet"> <link href="{% static 'css/plugins/select2/select2.min.css' %}" rel="stylesheet">
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script> <script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
......
...@@ -3,11 +3,12 @@ ...@@ -3,11 +3,12 @@
{% load i18n %} {% load i18n %}
{% block custom_head_css_js %} {% block custom_head_css_js %}
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet"> <link href='{% static "css/plugins/select2/select2.min.css" %}' rel="stylesheet">
<link href="{% static "css/plugins/sweetalert/sweetalert.css" %}" rel="stylesheet"> <link href='{% static "css/plugins/sweetalert/sweetalert.css" %}' rel="stylesheet">
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script> <script src='{% static "js/plugins/select2/select2.full.min.js" %}'></script>
<script src="{% static "js/plugins/sweetalert/sweetalert.min.js" %}"></script> <script src='{% static "js/plugins/sweetalert/sweetalert.min.js" %}'></script>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
...@@ -215,7 +216,7 @@ ...@@ -215,7 +216,7 @@
<form> <form>
<tr> <tr>
<td colspan="2" class="no-borders"> <td colspan="2" class="no-borders">
<select data-placeholder="{% trans 'Join asset groups' %}" id="groups_selected" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Join asset groups' %}" id="groups_selected" class="select2 groups" style="width: 100%" multiple="" tabindex="4">
{% for asset_group in asset_groups_remain %} {% for asset_group in asset_groups_remain %}
<option value="{{ asset_group.id }}" id="opt_{{ asset_group.id }}" >{{ asset_group.name }}</option> <option value="{{ asset_group.id }}" id="opt_{{ asset_group.id }}" >{{ asset_group.name }}</option>
{% endfor %} {% endfor %}
...@@ -251,7 +252,7 @@ ...@@ -251,7 +252,7 @@
<form> <form>
<tr class="no-borders-tr"> <tr class="no-borders-tr">
<td colspan="2"> <td colspan="2">
<select data-placeholder="{% trans 'Select system users' %}" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Select system users' %}" class="select2 system-user" style="width: 100%" multiple="" tabindex="4">
{% for system_user in system_users_all %} {% for system_user in system_users_all %}
<option value="{{ system_user.id }}" id="opt_{{ system_user.id }}">{{ system_user.name }}</option> <option value="{{ system_user.id }}" id="opt_{{ system_user.id }}">{{ system_user.name }}</option>
{% endfor %} {% endfor %}
...@@ -287,6 +288,7 @@ ...@@ -287,6 +288,7 @@
{% block custom_foot_js %} {% block custom_foot_js %}
<script> <script>
jumpserver.groups_selected = {}; jumpserver.groups_selected = {};
jumpserver.system_user_selected = {};
function updateAssetGroups(groups) { function updateAssetGroups(groups) {
var the_url = "{% url 'api-assets:asset-update-group' pk=asset.id %}"; var the_url = "{% url 'api-assets:asset-update-group' pk=asset.id %}";
var body = { var body = {
...@@ -316,7 +318,7 @@ function updateAssetGroups(groups) { ...@@ -316,7 +318,7 @@ function updateAssetGroups(groups) {
}); });
} }
function updateAssetSystem(system_users) { function updateAssetSystemUser(system_users) {
var the_url = "{% url 'api-assets:asset-update-system-users' pk=asset.id %}"; var the_url = "{% url 'api-assets:asset-update-system-users' pk=asset.id %}";
var body = { var body = {
system_users: Object.assign([], system_users) system_users: Object.assign([], system_users)
...@@ -324,7 +326,7 @@ function updateAssetSystem(system_users) { ...@@ -324,7 +326,7 @@ function updateAssetSystem(system_users) {
var success = function(data) { var success = function(data) {
$('.select2-selection__rendered').empty(); $('.select2-selection__rendered').empty();
$('#groups_selected').val(''); $('#groups_selected').val('');
$.map(jumpserver.groups_selected, function(name, index) { $.map(jumpserver.system_user_selected, function(name, index) {
$('#opt_' + index).remove(); $('#opt_' + index).remove();
$('#add-asset2systemuser tbody').append( $('#add-asset2systemuser tbody').append(
...@@ -335,7 +337,7 @@ function updateAssetSystem(system_users) { ...@@ -335,7 +337,7 @@ function updateAssetSystem(system_users) {
) )
}); });
// clear jumpserver.groups_selected // clear jumpserver.groups_selected
jumpserver.groups_selected = {}; jumpserver.system_user_selected = {};
}; };
APIUpdateAttr({ APIUpdateAttr({
url: the_url, url: the_url,
...@@ -358,12 +360,19 @@ function refreshAssetHardware() { ...@@ -358,12 +360,19 @@ function refreshAssetHardware() {
$(document).ready(function () { $(document).ready(function () {
$('.select2').select2().on('select2:select', function(evt) { $('.select2.groups').select2().on('select2:select', function(evt) {
var data = evt.params.data; var data = evt.params.data;
jumpserver.groups_selected[data.id] = data.text; jumpserver.groups_selected[data.id] = data.text;
}).on('select2:unselect', function(evt) { }).on('select2:unselect', function(evt) {
var data = evt.params.data; var data = evt.params.data;
delete jumpserver.groups_selected[data.id] delete jumpserver.groups_selected[data.id]
});
$('.select2.system-user').select2().on('select2:select', function(evt) {
var data = evt.params.data;
jumpserver.system_user_selected[data.id] = data.text;
}).on('select2:unselect', function(evt) {
var data = evt.params.data;
delete jumpserver.system_user_selected[data.id]
}) })
}).on('click', '#is_active', function () { }).on('click', '#is_active', function () {
var the_url = '{% url "api-assets:asset-detail" pk=asset.id %}'; var the_url = '{% url "api-assets:asset-detail" pk=asset.id %}';
...@@ -410,17 +419,17 @@ $(document).ready(function () { ...@@ -410,17 +419,17 @@ $(document).ready(function () {
}).get(); }).get();
updateAssetGroups(groups) updateAssetGroups(groups)
}).on('click', '.btn-system-user', function () { }).on('click', '.btn-system-user', function () {
if (Object.keys(jumpserver.groups_selected).length === 0) { if (Object.keys(jumpserver.system_user_selected).length === 0) {
return false; return false;
} }
var system_users = $('.bdg_group').map(function() { var system_users = $('.bdg_group').map(function() {
return $(this).data('sid'); return $(this).data('sid');
}).get(); }).get();
$.map(jumpserver.groups_selected, function(value, index) { $.map(jumpserver.system_user_selected, function(value, index) {
system_users.push(parseInt(index)); system_users.push(parseInt(index));
$('#opt_' + index).remove(); $('#opt_' + index).remove();
}); });
updateAssetSystem(system_users) updateAssetSystemUser(system_users)
}).on('click', '.btn_leave_system', function () { }).on('click', '.btn_leave_system', function () {
var $this = $(this); var $this = $(this);
...@@ -435,7 +444,7 @@ $(document).ready(function () { ...@@ -435,7 +444,7 @@ $(document).ready(function () {
var system_users = $('.bdg_group').map(function () { var system_users = $('.bdg_group').map(function () {
return $(this).data('sid'); return $(this).data('sid');
}).get(); }).get();
updateAssetSystem(system_users) updateAssetSystemUser(system_users)
}).on('click', '.btn-delete-asset', function () { }).on('click', '.btn-delete-asset', function () {
var $this = $(this); var $this = $(this);
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
{% load i18n %} {% load i18n %}
{% block custom_head_css_js %} {% block custom_head_css_js %}
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet"> <link href='{% static "css/plugins/select2/select2.min.css" %}' rel="stylesheet">
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script> <script src='{% static "js/plugins/select2/select2.full.min.js" %}'></script>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment