Unverified Commit b1132bfc authored by 老广's avatar 老广 Committed by GitHub

Merge pull request #1683 from jumpserver/dev

Dev
parents ae564ed0 75e67410
...@@ -20,7 +20,7 @@ class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -20,7 +20,7 @@ class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer):
model = Asset model = Asset
list_serializer_class = BulkListSerializer list_serializer_class = BulkListSerializer
fields = '__all__' fields = '__all__'
# validators = [] # If not set to [], partial bulk update will be error validators = []
def get_field_names(self, declared_fields, info): def get_field_names(self, declared_fields, info):
fields = super().get_field_names(declared_fields, info) fields = super().get_field_names(declared_fields, info)
......
...@@ -9,6 +9,7 @@ import chardet ...@@ -9,6 +9,7 @@ import chardet
from io import StringIO from io import StringIO
from django.db import transaction from django.db import transaction
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView, ListView, View from django.views.generic import TemplateView, ListView, View
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
...@@ -76,14 +77,6 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): ...@@ -76,14 +77,6 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
template_name = 'assets/asset_create.html' template_name = 'assets/asset_create.html'
success_url = reverse_lazy('assets:asset-list') success_url = reverse_lazy('assets:asset-list')
# def form_valid(self, form):
# print("form valid")
# asset = form.save()
# asset.created_by = self.request.user.username or 'Admin'
# asset.date_created = timezone.now()
# asset.save()
# return super().form_valid(form)
def get_form(self, form_class=None): def get_form(self, form_class=None):
form = super().get_form(form_class=form_class) form = super().get_form(form_class=form_class)
node_id = self.request.GET.get("node_id") node_id = self.request.GET.get("node_id")
...@@ -106,29 +99,12 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): ...@@ -106,29 +99,12 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
return create_success_msg % ({"name": cleaned_data["hostname"]}) return create_success_msg % ({"name": cleaned_data["hostname"]})
# class AssetModalListView(AdminUserRequiredMixin, ListView):
# paginate_by = settings.DISPLAY_PER_PAGE
# model = Asset
# context_object_name = 'asset_modal_list'
# template_name = 'assets/_asset_list_modal.html'
#
# def get_context_data(self, **kwargs):
# assets = Asset.objects.all()
# assets_id = self.request.GET.get('assets_id', '')
# assets_id_list = [i for i in assets_id.split(',') if i.isdigit()]
# context = {
# 'all_assets': assets_id_list,
# 'assets': assets
# }
# kwargs.update(context)
# return super().get_context_data(**kwargs)
class AssetBulkUpdateView(AdminUserRequiredMixin, ListView): class AssetBulkUpdateView(AdminUserRequiredMixin, ListView):
model = Asset model = Asset
form_class = forms.AssetBulkUpdateForm form_class = forms.AssetBulkUpdateForm
template_name = 'assets/asset_bulk_update.html' template_name = 'assets/asset_bulk_update.html'
success_url = reverse_lazy('assets:asset-list') success_url = reverse_lazy('assets:asset-list')
success_message = _("Bulk update asset success")
id_list = None id_list = None
form = None form = None
...@@ -150,6 +126,7 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView): ...@@ -150,6 +126,7 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView):
form = self.form_class(request.POST) form = self.form_class(request.POST)
if form.is_valid(): if form.is_valid():
form.save() form.save()
messages.success(request, self.success_message)
return redirect(self.success_url) return redirect(self.success_url)
else: else:
return self.get(request, form=form, *args, **kwargs) return self.get(request, form=form, *args, **kwargs)
......
This diff is collapsed.
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from threading import local
from werkzeug.local import Local
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.shortcuts import redirect from django.shortcuts import redirect
import warnings
from django.forms import ModelForm from django.forms import ModelForm
from django.http.response import HttpResponseForbidden from django.http.response import HttpResponseForbidden
...@@ -14,7 +13,7 @@ from .utils import current_org, set_current_org, set_to_root_org ...@@ -14,7 +13,7 @@ from .utils import current_org, set_current_org, set_to_root_org
from .models import Organization from .models import Organization
logger = get_logger(__file__) logger = get_logger(__file__)
tl = local() tl = Local()
__all__ = [ __all__ = [
'OrgManager', 'OrgViewGenericMixin', 'OrgModelMixin', 'OrgModelForm', 'OrgManager', 'OrgViewGenericMixin', 'OrgModelMixin', 'OrgModelForm',
...@@ -55,7 +54,7 @@ class OrgManager(models.Manager): ...@@ -55,7 +54,7 @@ class OrgManager(models.Manager):
class OrgModelMixin(models.Model): class OrgModelMixin(models.Model):
org_id = models.CharField(max_length=36, null=True, blank=True) org_id = models.CharField(max_length=36, null=True, blank=True, default=None)
objects = OrgManager() objects = OrgManager()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
...@@ -93,8 +92,8 @@ class RootOrgViewMixin: ...@@ -93,8 +92,8 @@ class RootOrgViewMixin:
class OrgModelForm(ModelForm): class OrgModelForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if 'initial' not in kwargs: # if 'initial' not in kwargs:
return # return
for name, field in self.fields.items(): for name, field in self.fields.items():
if not hasattr(field, 'queryset'): if not hasattr(field, 'queryset'):
continue continue
......
...@@ -2,16 +2,13 @@ ...@@ -2,16 +2,13 @@
# #
from functools import partial from functools import partial
from werkzeug.local import Local
from common.utils import LocalProxy from common.utils import LocalProxy
from .models import Organization from .models import Organization
try:
from threading import local
except ImportError:
from django.utils._threading_local import local
_thread_locals = local() _thread_locals = Local()
def get_org_from_request(request): def get_org_from_request(request):
......
...@@ -88,5 +88,4 @@ class NodePermission(OrgModelMixin): ...@@ -88,5 +88,4 @@ class NodePermission(OrgModelMixin):
return "{}:{}:{}".format(self.node.value, self.user_group.name, self.system_user.name) return "{}:{}:{}".format(self.node.value, self.user_group.name, self.system_user.name)
class Meta: class Meta:
unique_together = ('node', 'user_group', 'system_user')
verbose_name = _("Asset permission") verbose_name = _("Asset permission")
...@@ -258,12 +258,12 @@ class UserPublicKeyForm(forms.Form): ...@@ -258,12 +258,12 @@ class UserPublicKeyForm(forms.Form):
UserPublicKeyForm.verbose_name = _("Public key") UserPublicKeyForm.verbose_name = _("Public key")
class UserBulkUpdateForm(forms.ModelForm): class UserBulkUpdateForm(OrgModelForm):
users = forms.ModelMultipleChoiceField( users = forms.ModelMultipleChoiceField(
required=True, required=True,
help_text='* required', help_text='* required',
label=_('Select users'), label=_('Select users'),
queryset = User.objects.all(), queryset=User.objects.all(),
widget=forms.SelectMultiple( widget=forms.SelectMultiple(
attrs={ attrs={
'class': 'select2', 'class': 'select2',
...@@ -274,12 +274,12 @@ class UserBulkUpdateForm(forms.ModelForm): ...@@ -274,12 +274,12 @@ class UserBulkUpdateForm(forms.ModelForm):
class Meta: class Meta:
model = User model = User
fields = ['users', 'role', 'groups', 'date_expired'] fields = ['users', 'groups', 'date_expired']
widgets = { widgets = {
"groups": forms.SelectMultiple( "groups": forms.SelectMultiple(
attrs={ attrs={
'class': 'select2', 'class': 'select2',
'data-placeholder': _('Select users') 'data-placeholder': _('User group')
} }
) )
} }
......
...@@ -23,6 +23,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -23,6 +23,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer):
'first_name', 'last_name', 'password', '_private_key', 'first_name', 'last_name', 'password', '_private_key',
'_public_key', '_otp_secret_key', 'user_permissions' '_public_key', '_otp_secret_key', 'user_permissions'
] ]
# validators = []
def get_field_names(self, declared_fields, info): def get_field_names(self, declared_fields, info):
fields = super(UserSerializer, self).get_field_names(declared_fields, info) fields = super(UserSerializer, self).get_field_names(declared_fields, info)
...@@ -64,6 +65,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -64,6 +65,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer):
model = UserGroup model = UserGroup
list_serializer_class = BulkListSerializer list_serializer_class = BulkListSerializer
fields = '__all__' fields = '__all__'
read_only_fields = ['id', 'created_by']
@staticmethod @staticmethod
def get_users(obj): def get_users(obj):
...@@ -71,7 +73,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer): ...@@ -71,7 +73,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer):
class UserGroupUpdateMemeberSerializer(serializers.ModelSerializer): class UserGroupUpdateMemeberSerializer(serializers.ModelSerializer):
users = serializers.PrimaryKeyRelatedField(many=True, queryset = User.objects.all()) users = serializers.PrimaryKeyRelatedField(many=True, queryset=User.objects.all())
class Meta: class Meta:
model = UserGroup model = UserGroup
......
...@@ -24,9 +24,9 @@ from django.views import View ...@@ -24,9 +24,9 @@ from django.views import View
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.db import transaction from django.db import transaction
from django.views.generic.edit import ( from django.views.generic.edit import (
CreateView, UpdateView, FormMixin, FormView CreateView, UpdateView, FormView
) )
from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.detail import DetailView
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth import logout as auth_logout from django.contrib.auth import logout as auth_logout
...@@ -41,7 +41,6 @@ from ..utils import generate_otp_uri, check_otp_code, \ ...@@ -41,7 +41,6 @@ from ..utils import generate_otp_uri, check_otp_code, \
get_user_or_tmp_user, get_password_check_rules, check_password_rules, \ get_user_or_tmp_user, get_password_check_rules, check_password_rules, \
is_need_unblock is_need_unblock
from ..signals import post_user_create from ..signals import post_user_create
from ..tasks import write_login_log_async
__all__ = [ __all__ = [
'UserListView', 'UserCreateView', 'UserDetailView', 'UserListView', 'UserCreateView', 'UserDetailView',
...@@ -171,7 +170,7 @@ class UserBulkUpdateView(AdminUserRequiredMixin, TemplateView): ...@@ -171,7 +170,7 @@ class UserBulkUpdateView(AdminUserRequiredMixin, TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
'app': 'Assets', 'app': 'Assets',
'action': 'Bulk update asset', 'action': _('Bulk update user'),
'form': self.form, 'form': self.form,
'users_selected': self.id_list, 'users_selected': self.id_list,
} }
......
...@@ -14,11 +14,11 @@ coreapi==2.3.3 ...@@ -14,11 +14,11 @@ coreapi==2.3.3
coreschema==0.0.4 coreschema==0.0.4
cryptography==2.1.4 cryptography==2.1.4
decorator==4.1.2 decorator==4.1.2
Django==2.0.7 Django==2.1
django-auth-ldap==1.3.0 django-auth-ldap==1.3.0
django-bootstrap3==9.1.0 django-bootstrap3==9.1.0
django-celery-beat==1.1.1 django-celery-beat==1.1.1
django-filter==1.1.0 django-filter==2.0.0
django-formtools==2.1 django-formtools==2.1
django-ranged-response==0.2.0 django-ranged-response==0.2.0
django-redis-cache==1.7.1 django-redis-cache==1.7.1
...@@ -70,3 +70,4 @@ uritemplate==3.0.0 ...@@ -70,3 +70,4 @@ uritemplate==3.0.0
urllib3==1.22 urllib3==1.22
vine==1.1.4 vine==1.1.4
drf-yasg==1.9.1 drf-yasg==1.9.1
Werkzeug==0.14.1
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