mirror of https://github.com/jumpserver/jumpserver
[Update] 修改 success message, 添加资产组时可以添加资产
parent
450a9495ec
commit
72a82c41ee
|
@ -124,20 +124,25 @@ class AssetGroupForm(forms.ModelForm):
|
|||
label=_('Asset'),
|
||||
required=False,
|
||||
widget=forms.SelectMultiple(
|
||||
attrs={'class': 'select2', 'data-placeholder': _('Select assets')})
|
||||
attrs={'class': 'select2', 'data-placeholder': _('Select assets')}
|
||||
)
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if kwargs.get('instance', None):
|
||||
def __init__(self, **kwargs):
|
||||
instance = kwargs.get('instance')
|
||||
if instance:
|
||||
initial = kwargs.get('initial', {})
|
||||
initial['assets'] = kwargs['instance'].assets.all()
|
||||
super(AssetGroupForm, self).__init__(*args, **kwargs)
|
||||
initial.update({
|
||||
'assets': instance.assets.all(),
|
||||
})
|
||||
kwargs['initial'] = initial
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def _save_m2m(self):
|
||||
super(AssetGroupForm, self)._save_m2m()
|
||||
assets = self.cleaned_data['assets']
|
||||
self.instance.assets.clear()
|
||||
self.instance.assets.add(*tuple(assets))
|
||||
def save(self, commit=True):
|
||||
group = super().save(commit=commit)
|
||||
assets= self.cleaned_data['assets']
|
||||
group.assets.set(assets)
|
||||
return group
|
||||
|
||||
class Meta:
|
||||
model = AssetGroup
|
||||
|
|
|
@ -44,7 +44,7 @@ class Asset(models.Model):
|
|||
hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname'))
|
||||
port = models.IntegerField(default=22, verbose_name=_('Port'))
|
||||
groups = models.ManyToManyField(AssetGroup, blank=True, related_name='assets', verbose_name=_('Asset groups'))
|
||||
cluster = models.ForeignKey(Cluster, blank=True, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('Cluster'))
|
||||
cluster = models.ForeignKey(Cluster, related_name='assets', on_delete=models.PROTECT, verbose_name=_('Cluster'))
|
||||
is_active = models.BooleanField(default=True, verbose_name=_('Is active'))
|
||||
type = models.CharField(choices=TYPE_CHOICES, max_length=16, blank=True, null=True, default='Server', verbose_name=_('Asset type'),)
|
||||
env = models.CharField(choices=ENV_CHOICES, max_length=8, blank=True, null=True, default='Prod', verbose_name=_('Asset environment'),)
|
||||
|
|
|
@ -27,10 +27,11 @@ def test_asset_conn_on_created(asset):
|
|||
|
||||
|
||||
def push_cluster_system_users_to_asset(asset):
|
||||
logger.info("Push cluster system user to asset: {}".format(asset))
|
||||
task_name = _("Push cluster system users to asset")
|
||||
system_users = asset.cluster.systemuser_set.all()
|
||||
push_system_user_util.delay(system_users, [asset], task_name)
|
||||
if asset.cluster:
|
||||
logger.info("Push cluster system user to asset: {}".format(asset))
|
||||
task_name = _("Push cluster system users to asset")
|
||||
system_users = asset.cluster.systemuser_set.all()
|
||||
push_system_user_util.delay(system_users, [asset], task_name)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Asset, dispatch_uid="my_unique_identifier")
|
||||
|
|
|
@ -1,119 +1,31 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% extends '_base_create_update.html' %}
|
||||
{% load static %}
|
||||
{% load bootstrap3 %}
|
||||
{% block custom_head_css_js %}
|
||||
<link href="{% static 'css/plugins/select2/select2.min.css' %}" rel="stylesheet">
|
||||
<script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="wrapper wrapper-content animated fadeInRight">
|
||||
<div class="row">
|
||||
<div class="col-sm-10">
|
||||
<div class="ibox float-e-margins">
|
||||
<div id="ibox-content" class="ibox-title">
|
||||
<h5> {{ action }}</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>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% load i18n %}
|
||||
|
||||
<div class="ibox-content">
|
||||
<div class="panel blank-panel">
|
||||
<div class="panel-body">
|
||||
<div class="tab-content">
|
||||
<form id="groupForm" method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
<h3 class="widget-head-color-box">资产组信息</h3>
|
||||
{% bootstrap_field form.name layout="horizontal" %}
|
||||
{% bootstrap_field form.comment layout="horizontal" %}
|
||||
{# <div class="hr-line-dashed"></div>#}
|
||||
{# <h3 class="widget-head-color-box">用户选择的资产</h3>#}
|
||||
{# <div class="form-group">#}
|
||||
{# <label class="col-sm-2 control-label" id="asset_on_count">已选({{ assets_count }})</label>#}
|
||||
{# <div class="col-sm-9" id="asset_sed">#}
|
||||
{# <div class="form-asset-on" id="add_asset">#}
|
||||
{# <p id="asset_on_p">#}
|
||||
{# {% for asset in assets_on_list %}#}
|
||||
{# <button name='asset_hostname' title='{{ asset.ip }}' type='button' class='btn btn-default btn-xs'>{{ asset.hostname }}</button>#}
|
||||
{# {% endfor %}#}
|
||||
{# </p>#}
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
<div class="hr-line-dashed"></div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4 col-sm-offset-5">
|
||||
<button class="btn btn-white" type="reset"> 重置 </button>
|
||||
<button class="btn btn-primary" type="submit"> 提交 </button>
|
||||
<div id='box2'> </div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% block form %}
|
||||
<form id="groupForm" method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_field form.name layout="horizontal" %}
|
||||
{% bootstrap_field form.assets layout="horizontal" %}
|
||||
{% bootstrap_field form.comment layout="horizontal" %}
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4 col-sm-offset-2">
|
||||
<button class="btn btn-default" type="reset"> {% trans 'Reset' %}</button>
|
||||
<button id="submit_button" class="btn btn-primary" type="submit">{% trans 'Submit' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 模态框(Modal) -->
|
||||
<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content" id="box">
|
||||
<!--此部分为主体内容,将远程加载进来-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block custom_foot_js %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$('.select2').select2();
|
||||
$('.select2-system-user').select2();
|
||||
$('.select2').select2({
|
||||
closeOnSelect: false
|
||||
});
|
||||
});
|
||||
|
||||
$('#add_asset').on('click',function(){
|
||||
$('#modal').modal('show');
|
||||
});
|
||||
|
||||
$('#modal').modal({
|
||||
show: false,
|
||||
backdrop: 'static',
|
||||
keyboard: 'false',
|
||||
remote:"{% url 'assets:asset-modal-list' %}?group_id={{ group_id }}"
|
||||
});
|
||||
$('#modal').on('show.bs.modal',function(){
|
||||
//alert('当调用show方法时,立即触发;')
|
||||
});
|
||||
|
||||
$('#modal').on('shown.bs.modal',function(){
|
||||
//alert('当弹窗完全加载完后,再触发;')
|
||||
});
|
||||
|
||||
$('#modal').on('hide.bs.modal',function(){
|
||||
//alert('当关闭时,立即触发;')
|
||||
});
|
||||
|
||||
$('#modal').on('hidden.bs.modal',function(){
|
||||
//alert('当关完全关闭后,再触发;')
|
||||
});
|
||||
|
||||
$('#modal').on('loaded.bs.modal',function(){
|
||||
//alert('当远程数据加载完毕后,再触发;')
|
||||
});
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -2,20 +2,22 @@
|
|||
from __future__ import absolute_import, unicode_literals
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.conf import settings
|
||||
from django.views.generic import TemplateView, ListView, View
|
||||
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import TemplateView, ListView
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from .. import forms
|
||||
from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser
|
||||
from ..models import AdminUser, Cluster
|
||||
from ..hands import AdminUserRequiredMixin
|
||||
|
||||
__all__ = ['AdminUserCreateView', 'AdminUserDetailView',
|
||||
'AdminUserDeleteView', 'AdminUserListView',
|
||||
'AdminUserUpdateView', 'AdminUserAssetsView',
|
||||
]
|
||||
__all__ = [
|
||||
'AdminUserCreateView', 'AdminUserDetailView',
|
||||
'AdminUserDeleteView', 'AdminUserListView',
|
||||
'AdminUserUpdateView', 'AdminUserAssetsView',
|
||||
]
|
||||
|
||||
|
||||
class AdminUserListView(AdminUserRequiredMixin, TemplateView):
|
||||
|
@ -38,6 +40,7 @@ class AdminUserCreateView(AdminUserRequiredMixin,
|
|||
form_class = forms.AdminUserForm
|
||||
template_name = 'assets/admin_user_create_update.html'
|
||||
success_url = reverse_lazy('assets:admin-user-list')
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -47,20 +50,13 @@ class AdminUserCreateView(AdminUserRequiredMixin,
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
success_message = _(
|
||||
'Create admin user <a href="{url}">{name}</a> successfully.'.format(
|
||||
url=reverse_lazy('assets:admin-user-detail',
|
||||
kwargs={'pk': self.object.pk}),
|
||||
name=self.object.name,
|
||||
))
|
||||
return success_message
|
||||
|
||||
|
||||
class AdminUserUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class AdminUserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = AdminUser
|
||||
form_class = forms.AdminUserForm
|
||||
template_name = 'assets/admin_user_create_update.html'
|
||||
success_url = reverse_lazy('assets:admin-user-list')
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -70,11 +66,6 @@ class AdminUserUpdateView(AdminUserRequiredMixin, UpdateView):
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
success_url = reverse_lazy('assets:admin-user-detail',
|
||||
kwargs={'pk': self.object.pk})
|
||||
return success_url
|
||||
|
||||
|
||||
class AdminUserDetailView(AdminUserRequiredMixin, DetailView):
|
||||
model = AdminUser
|
||||
|
|
|
@ -21,10 +21,11 @@ from django.core.cache import cache
|
|||
from django.utils import timezone
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.shortcuts import redirect
|
||||
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
|
||||
from common.mixins import JSONResponseMixin
|
||||
from common.utils import get_object_or_none, get_logger, is_uuid
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from .. import forms
|
||||
from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser
|
||||
from ..hands import AdminUserRequiredMixin
|
||||
|
@ -46,7 +47,6 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
|
|||
context = {
|
||||
'app': _('Assets'),
|
||||
'action': _('Asset list'),
|
||||
# 'groups': AssetGroup.objects.all(),
|
||||
'system_users': SystemUser.objects.all(),
|
||||
}
|
||||
kwargs.update(context)
|
||||
|
@ -66,7 +66,7 @@ class UserAssetListView(LoginRequiredMixin, TemplateView):
|
|||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetCreateView(AdminUserRequiredMixin, CreateView):
|
||||
class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = Asset
|
||||
form_class = forms.AssetCreateForm
|
||||
template_name = 'assets/asset_create.html'
|
||||
|
@ -87,6 +87,9 @@ class AssetCreateView(AdminUserRequiredMixin, CreateView):
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
return create_success_msg % ({"name": cleaned_data["hostname"]})
|
||||
|
||||
|
||||
class AssetModalListView(AdminUserRequiredMixin, ListView):
|
||||
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
||||
|
@ -147,7 +150,7 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView):
|
|||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class AssetUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = Asset
|
||||
form_class = forms.AssetUpdateForm
|
||||
template_name = 'assets/asset_update.html'
|
||||
|
@ -161,6 +164,9 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateView):
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
return update_success_msg % ({"name": cleaned_data["hostname"]})
|
||||
|
||||
|
||||
class AssetDeleteView(AdminUserRequiredMixin, DeleteView):
|
||||
model = Asset
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
# coding:utf-8
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views.generic import TemplateView, ListView, View
|
||||
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from .. import forms
|
||||
from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser
|
||||
from ..hands import AdminUserRequiredMixin
|
||||
|
||||
|
||||
__all__ = ['ClusterListView', 'ClusterCreateView', 'ClusterUpdateView',
|
||||
'ClusterDetailView', 'ClusterDeleteView', 'ClusterAssetsView']
|
||||
__all__ = [
|
||||
'ClusterListView', 'ClusterCreateView', 'ClusterUpdateView',
|
||||
'ClusterDetailView', 'ClusterDeleteView', 'ClusterAssetsView',
|
||||
]
|
||||
|
||||
|
||||
class ClusterListView(AdminUserRequiredMixin, TemplateView):
|
||||
|
@ -21,17 +25,17 @@ class ClusterListView(AdminUserRequiredMixin, TemplateView):
|
|||
context = {
|
||||
'app': _('Assets'),
|
||||
'action': _('Cluster list'),
|
||||
# 'keyword': self.request.GET.get('keyword', '')
|
||||
}
|
||||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class ClusterCreateView(AdminUserRequiredMixin, CreateView):
|
||||
class ClusterCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = Cluster
|
||||
form_class = forms.ClusterForm
|
||||
template_name = 'assets/cluster_create_update.html'
|
||||
success_url = reverse_lazy('assets:cluster-list')
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -43,17 +47,18 @@ class ClusterCreateView(AdminUserRequiredMixin, CreateView):
|
|||
|
||||
def form_valid(self, form):
|
||||
cluster = form.save(commit=False)
|
||||
cluster.created_by = self.request.user.username or 'System'
|
||||
cluster.created_by = self.request.user.username
|
||||
cluster.save()
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
class ClusterUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class ClusterUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = Cluster
|
||||
form_class = forms.ClusterForm
|
||||
template_name = 'assets/cluster_create_update.html'
|
||||
context_object_name = 'cluster'
|
||||
success_url = reverse_lazy('assets:cluster-list')
|
||||
success_message = update_success_msg
|
||||
|
||||
def form_valid(self, form):
|
||||
cluster = form.save(commit=False)
|
||||
|
|
|
@ -7,42 +7,41 @@ from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateVi
|
|||
from django.urls import reverse_lazy
|
||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
from django.shortcuts import get_object_or_404, reverse, redirect
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from .. import forms
|
||||
from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser
|
||||
from ..hands import AdminUserRequiredMixin
|
||||
|
||||
|
||||
__all__ = ['AssetGroupCreateView', 'AssetGroupDetailView',
|
||||
'AssetGroupUpdateView', 'AssetGroupListView',
|
||||
'AssetGroupDeleteView',
|
||||
]
|
||||
__all__ = [
|
||||
'AssetGroupCreateView', 'AssetGroupDetailView',
|
||||
'AssetGroupUpdateView', 'AssetGroupListView',
|
||||
'AssetGroupDeleteView',
|
||||
]
|
||||
|
||||
|
||||
class AssetGroupCreateView(AdminUserRequiredMixin, CreateView):
|
||||
class AssetGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = AssetGroup
|
||||
form_class = forms.AssetGroupForm
|
||||
template_name = 'assets/asset_group_create.html'
|
||||
success_url = reverse_lazy('assets:asset-group-list')
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
'app': _('Assets'),
|
||||
'action': _('Create asset group'),
|
||||
'assets_count': 0,
|
||||
}
|
||||
kwargs.update(context)
|
||||
return super(AssetGroupCreateView, self).get_context_data(**kwargs)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def form_valid(self, form):
|
||||
asset_group = form.save()
|
||||
assets_id_list = self.request.POST.getlist('assets', [])
|
||||
assets = [get_object_or_404(Asset, id=int(asset_id))
|
||||
for asset_id in assets_id_list]
|
||||
asset_group.created_by = self.request.user.username or 'Admin'
|
||||
asset_group.assets.add(*tuple(assets))
|
||||
asset_group.save()
|
||||
return super(AssetGroupCreateView, self).form_valid(form)
|
||||
group = form.save()
|
||||
group.created_by = self.request.user.username
|
||||
group.save()
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
class AssetGroupListView(AdminUserRequiredMixin, TemplateView):
|
||||
|
@ -54,7 +53,6 @@ class AssetGroupListView(AdminUserRequiredMixin, TemplateView):
|
|||
'action': _('Asset group list'),
|
||||
'assets': Asset.objects.all(),
|
||||
'system_users': SystemUser.objects.all(),
|
||||
'keyword': self.request.GET.get('keyword', '')
|
||||
}
|
||||
kwargs.update(context)
|
||||
return super(AssetGroupListView, self).get_context_data(**kwargs)
|
||||
|
@ -77,27 +75,20 @@ class AssetGroupDetailView(AdminUserRequiredMixin, DetailView):
|
|||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetGroupUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class AssetGroupUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = AssetGroup
|
||||
form_class = forms.AssetGroupForm
|
||||
template_name = 'assets/asset_group_create.html'
|
||||
success_url = reverse_lazy('assets:asset-group-list')
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
self.object = self.get_object(queryset=AssetGroup.objects.all())
|
||||
return super(AssetGroupUpdateView, self).get(request, *args, **kwargs)
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
assets_all = self.object.assets.all()
|
||||
context = {
|
||||
'app': _('Assets'),
|
||||
'action': _('Create asset group'),
|
||||
'assets_on_list': assets_all,
|
||||
'assets_count': len(assets_all),
|
||||
'group_id': self.object.id,
|
||||
}
|
||||
kwargs.update(context)
|
||||
return super(AssetGroupUpdateView, self).get_context_data(**kwargs)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class AssetGroupDeleteView(AdminUserRequiredMixin, DeleteView):
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# ~*~ coding: utf-8 ~*~
|
||||
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import redirect, reverse
|
||||
from django.shortcuts import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.db import transaction
|
||||
from django.views.generic import TemplateView, ListView, FormView
|
||||
from django.views.generic import TemplateView
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
from django.urls import reverse_lazy
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
from django.views.generic.detail import DetailView
|
||||
|
||||
from ..forms import SystemUserForm, SystemUserUpdateForm, SystemUserAuthForm
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from ..forms import SystemUserForm, SystemUserUpdateForm
|
||||
from ..models import SystemUser, Cluster
|
||||
from ..hands import AdminUserRequiredMixin
|
||||
|
||||
|
||||
__all__ = ['SystemUserCreateView', 'SystemUserUpdateView',
|
||||
'SystemUserDetailView', 'SystemUserDeleteView',
|
||||
'SystemUserAssetView', 'SystemUserListView',
|
||||
]
|
||||
__all__ = [
|
||||
'SystemUserCreateView', 'SystemUserUpdateView',
|
||||
'SystemUserDetailView', 'SystemUserDeleteView',
|
||||
'SystemUserAssetView', 'SystemUserListView',
|
||||
]
|
||||
|
||||
|
||||
class SystemUserListView(AdminUserRequiredMixin, TemplateView):
|
||||
|
@ -38,10 +39,7 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi
|
|||
form_class = SystemUserForm
|
||||
template_name = 'assets/system_user_create.html'
|
||||
success_url = reverse_lazy('assets:system-user-list')
|
||||
|
||||
@transaction.atomic
|
||||
def post(self, request, *args, **kwargs):
|
||||
return super(SystemUserCreateView, self).post(request, *args, **kwargs)
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -51,20 +49,13 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse('assets:system-user-detail', kwargs={'pk': self.object.pk})
|
||||
success_message = _(
|
||||
'Create system user <a href="{url}">{name}</a> '
|
||||
'successfully.'.format(url=url, name=self.object.name)
|
||||
)
|
||||
|
||||
return success_message
|
||||
|
||||
|
||||
class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class SystemUserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = SystemUser
|
||||
form_class = SystemUserUpdateForm
|
||||
template_name = 'assets/system_user_update.html'
|
||||
success_url = reverse_lazy('assets:system-user-list')
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -74,11 +65,6 @@ class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView):
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
success_url = reverse_lazy('assets:system-user-detail',
|
||||
kwargs={'pk': self.object.pk})
|
||||
return success_url
|
||||
|
||||
|
||||
class SystemUserDetailView(AdminUserRequiredMixin, DetailView):
|
||||
template_name = 'assets/system_user_detail.html'
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
create_success_msg = _("<b>%(name)s</b> was created successfully")
|
||||
update_success_msg = _("<b>%(name)s</b> was updated successfully")
|
|
@ -374,4 +374,5 @@ BOOTSTRAP3 = {
|
|||
'horizontal_field_class': 'col-md-9',
|
||||
# Set placeholder attributes to label if no placeholder is provided
|
||||
'set_placeholder': True,
|
||||
'success_css_class': '',
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Jumpserver 0.3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-01-08 15:58+0800\n"
|
||||
"POT-Creation-Date: 2018-01-09 23:01+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
|
||||
|
@ -76,22 +76,22 @@ msgstr "端口"
|
|||
msgid "Asset"
|
||||
msgstr "资产"
|
||||
|
||||
#: assets/forms.py:156 perms/forms.py:40
|
||||
#: assets/forms.py:161 perms/forms.py:40
|
||||
#: perms/templates/perms/asset_permission_detail.html:144 users/forms.py:245
|
||||
msgid "Select system users"
|
||||
msgstr "选择系统用户"
|
||||
|
||||
#: assets/forms.py:158
|
||||
#: assets/forms.py:163
|
||||
#: assets/templates/assets/_asset_group_bulk_update_modal.html:22
|
||||
#: assets/templates/assets/cluster_list.html:22
|
||||
msgid "System users"
|
||||
msgstr "系统用户"
|
||||
|
||||
#: assets/forms.py:160
|
||||
#: assets/forms.py:165
|
||||
msgid "Selected system users will be create at cluster assets"
|
||||
msgstr "选择的系统用户将会在该集群资产上创建"
|
||||
|
||||
#: assets/forms.py:168 assets/forms.py:243 assets/forms.py:302
|
||||
#: assets/forms.py:173 assets/forms.py:248 assets/forms.py:307
|
||||
#: assets/models/cluster.py:18 assets/models/group.py:20
|
||||
#: assets/models/user.py:28 assets/templates/assets/admin_user_detail.html:56
|
||||
#: assets/templates/assets/admin_user_list.html:22
|
||||
|
@ -120,15 +120,15 @@ msgstr "选择的系统用户将会在该集群资产上创建"
|
|||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: assets/forms.py:174
|
||||
#: assets/forms.py:179
|
||||
msgid "Cluster level admin user"
|
||||
msgstr "集群级别管理用户"
|
||||
|
||||
#: assets/forms.py:195
|
||||
#: assets/forms.py:200
|
||||
msgid "Password or private key password"
|
||||
msgstr "密码或秘钥不合法"
|
||||
|
||||
#: assets/forms.py:196 assets/models/user.py:30 users/forms.py:16
|
||||
#: assets/forms.py:201 assets/models/user.py:30 users/forms.py:16
|
||||
#: users/forms.py:24 users/templates/users/login.html:56
|
||||
#: users/templates/users/reset_password.html:52
|
||||
#: users/templates/users/user_create.html:11
|
||||
|
@ -138,19 +138,19 @@ msgstr "密码或秘钥不合法"
|
|||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: assets/forms.py:199 users/models/user.py:46
|
||||
#: assets/forms.py:204 users/models/user.py:46
|
||||
msgid "Private key"
|
||||
msgstr "ssh私钥"
|
||||
|
||||
#: assets/forms.py:224 assets/forms.py:284 assets/forms.py:345
|
||||
#: assets/forms.py:229 assets/forms.py:289 assets/forms.py:350
|
||||
msgid "Invalid private key"
|
||||
msgstr "ssh密钥不合法"
|
||||
|
||||
#: assets/forms.py:235
|
||||
#: assets/forms.py:240
|
||||
msgid "Password and private key file must be input one"
|
||||
msgstr "密码和私钥, 必须输入一个"
|
||||
|
||||
#: assets/forms.py:244 assets/forms.py:303 assets/models/user.py:29
|
||||
#: assets/forms.py:249 assets/forms.py:308 assets/models/user.py:29
|
||||
#: assets/templates/assets/admin_user_detail.html:60
|
||||
#: assets/templates/assets/admin_user_list.html:23
|
||||
#: assets/templates/assets/system_user_detail.html:57
|
||||
|
@ -166,23 +166,23 @@ msgstr "密码和私钥, 必须输入一个"
|
|||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
||||
#: assets/forms.py:291 assets/forms.py:351
|
||||
#: assets/forms.py:296 assets/forms.py:356
|
||||
msgid "Auth info required, private_key or password"
|
||||
msgstr "密钥和密码必须填写一个"
|
||||
|
||||
#: assets/forms.py:306
|
||||
#: assets/forms.py:311
|
||||
msgid " Select clusters"
|
||||
msgstr "选择集群"
|
||||
|
||||
#: assets/forms.py:311
|
||||
#: assets/forms.py:316
|
||||
msgid "If auto push checked, system user will be create at cluster assets"
|
||||
msgstr "如果选择了自动推送,系统用户将会创建在集群资产上"
|
||||
|
||||
#: assets/forms.py:312
|
||||
#: assets/forms.py:317
|
||||
msgid "Auto push system user to asset"
|
||||
msgstr "自动推送系统用户到资产"
|
||||
|
||||
#: assets/forms.py:313
|
||||
#: assets/forms.py:318
|
||||
msgid ""
|
||||
"High level will be using login asset as default, if user was granted more "
|
||||
"than 2 system user"
|
||||
|
@ -260,12 +260,12 @@ msgid "Hostname"
|
|||
msgstr "主机名"
|
||||
|
||||
#: assets/models/asset.py:46 assets/templates/assets/asset_detail.html:213
|
||||
#: assets/views/asset.py:212 assets/views/asset.py:252
|
||||
#: assets/views/asset.py:218 assets/views/asset.py:258
|
||||
msgid "Asset groups"
|
||||
msgstr "资产组"
|
||||
|
||||
#: assets/models/asset.py:47 assets/models/cluster.py:40
|
||||
#: assets/models/user.py:215 assets/templates/assets/asset_detail.html:85
|
||||
#: assets/models/user.py:219 assets/templates/assets/asset_detail.html:85
|
||||
#: assets/templates/assets/asset_list.html:33 templates/_nav.html:24
|
||||
msgid "Cluster"
|
||||
msgstr "集群"
|
||||
|
@ -287,7 +287,7 @@ msgid "Asset status"
|
|||
msgstr "资产状态"
|
||||
|
||||
#: assets/models/asset.py:54 assets/models/cluster.py:19
|
||||
#: assets/models/user.py:186 assets/templates/assets/asset_detail.html:73
|
||||
#: assets/models/user.py:190 assets/templates/assets/asset_detail.html:73
|
||||
#: assets/templates/assets/cluster_list.html:20 templates/_nav.html:25
|
||||
msgid "Admin user"
|
||||
msgstr "管理用户"
|
||||
|
@ -443,7 +443,7 @@ msgstr "运营商"
|
|||
msgid "Default"
|
||||
msgstr "默认"
|
||||
|
||||
#: assets/models/cluster.py:36 users/models/user.py:259
|
||||
#: assets/models/cluster.py:36 users/models/user.py:263
|
||||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
|
@ -468,29 +468,29 @@ msgstr "ssh密钥"
|
|||
msgid "SSH public key"
|
||||
msgstr "ssh公钥"
|
||||
|
||||
#: assets/models/user.py:216
|
||||
#: assets/models/user.py:220
|
||||
msgid "Priority"
|
||||
msgstr "优先级"
|
||||
|
||||
#: assets/models/user.py:217 assets/templates/assets/system_user_detail.html:61
|
||||
#: assets/models/user.py:221 assets/templates/assets/system_user_detail.html:61
|
||||
msgid "Protocol"
|
||||
msgstr "协议"
|
||||
|
||||
#: assets/models/user.py:218 assets/templates/assets/_system_user.html:59
|
||||
#: assets/models/user.py:222 assets/templates/assets/_system_user.html:59
|
||||
#: assets/templates/assets/system_user_detail.html:113
|
||||
#: assets/templates/assets/system_user_update.html:11
|
||||
msgid "Auto push"
|
||||
msgstr "自动推送"
|
||||
|
||||
#: assets/models/user.py:219 assets/templates/assets/system_user_detail.html:65
|
||||
#: assets/models/user.py:223 assets/templates/assets/system_user_detail.html:65
|
||||
msgid "Sudo"
|
||||
msgstr "Sudo"
|
||||
|
||||
#: assets/models/user.py:220 assets/templates/assets/system_user_detail.html:70
|
||||
#: assets/models/user.py:224 assets/templates/assets/system_user_detail.html:70
|
||||
msgid "Shell"
|
||||
msgstr "Shell"
|
||||
|
||||
#: assets/models/user.py:265 perms/models.py:19
|
||||
#: assets/models/user.py:269 perms/models.py:19
|
||||
#: perms/templates/perms/asset_permission_detail.html:136
|
||||
#: perms/templates/perms/asset_permission_list.html:30 templates/_nav.html:26
|
||||
#: terminal/backends/command/models.py:12 terminal/models.py:94
|
||||
|
@ -508,15 +508,15 @@ msgstr "系统用户"
|
|||
msgid "%(value)s is not an even number"
|
||||
msgstr "%(value)s is not an even number"
|
||||
|
||||
#: assets/signals_handler.py:31
|
||||
#: assets/signals_handler.py:32
|
||||
msgid "Push cluster system users to asset"
|
||||
msgstr "推送集群系统用户到资产"
|
||||
|
||||
#: assets/signals_handler.py:63 assets/signals_handler.py:125
|
||||
#: assets/signals_handler.py:64 assets/signals_handler.py:126
|
||||
msgid "Push system user to cluster assets: {}->{}"
|
||||
msgstr "推送系统用户到: {}->{}"
|
||||
|
||||
#: assets/signals_handler.py:102
|
||||
#: assets/signals_handler.py:103
|
||||
msgid "Push system user to assets"
|
||||
msgstr "推送系统用户到资产"
|
||||
|
||||
|
@ -552,11 +552,11 @@ msgstr "测试系统用户可连接性: {}"
|
|||
msgid "Test system user connectability period: {}"
|
||||
msgstr "定期测试系统用户可连接性: {}"
|
||||
|
||||
#: assets/tasks.py:372
|
||||
#: assets/tasks.py:376
|
||||
msgid "Push system user to cluster assets: {}"
|
||||
msgstr "推送系统用户到资产: {}"
|
||||
|
||||
#: assets/tasks.py:393
|
||||
#: assets/tasks.py:397
|
||||
msgid "Push cluster system users to assets period: {}"
|
||||
msgstr "定期推送集群系统用户到资产: {}"
|
||||
|
||||
|
@ -570,16 +570,16 @@ msgstr "仅修改你需要更新的字段"
|
|||
|
||||
#: assets/templates/assets/_asset_group_bulk_update_modal.html:12
|
||||
#: assets/templates/assets/system_user_asset.html:21
|
||||
#: assets/views/admin_user.py:27 assets/views/admin_user.py:44
|
||||
#: assets/views/admin_user.py:67 assets/views/admin_user.py:88
|
||||
#: assets/views/admin_user.py:115 assets/views/asset.py:47
|
||||
#: assets/views/asset.py:61 assets/views/asset.py:84 assets/views/asset.py:141
|
||||
#: assets/views/asset.py:158 assets/views/asset.py:179
|
||||
#: assets/views/cluster.py:22 assets/views/cluster.py:80
|
||||
#: assets/views/cluster.py:97 assets/views/group.py:30 assets/views/group.py:53
|
||||
#: assets/views/group.py:71 assets/views/group.py:93
|
||||
#: assets/views/system_user.py:29 assets/views/system_user.py:48
|
||||
#: assets/views/system_user.py:71 assets/views/system_user.py:91
|
||||
#: assets/views/admin_user.py:29 assets/views/admin_user.py:47
|
||||
#: assets/views/admin_user.py:63 assets/views/admin_user.py:79
|
||||
#: assets/views/admin_user.py:106 assets/views/asset.py:48
|
||||
#: assets/views/asset.py:61 assets/views/asset.py:84 assets/views/asset.py:144
|
||||
#: assets/views/asset.py:161 assets/views/asset.py:185
|
||||
#: assets/views/cluster.py:26 assets/views/cluster.py:85
|
||||
#: assets/views/cluster.py:102 assets/views/group.py:34
|
||||
#: assets/views/group.py:52 assets/views/group.py:69 assets/views/group.py:87
|
||||
#: assets/views/system_user.py:30 assets/views/system_user.py:46
|
||||
#: assets/views/system_user.py:62 assets/views/system_user.py:77
|
||||
#: templates/_nav.html:19
|
||||
msgid "Assets"
|
||||
msgstr "资产管理"
|
||||
|
@ -620,7 +620,7 @@ msgstr "如果设置了id,则会使用该行信息更新该id的资产"
|
|||
|
||||
#: assets/templates/assets/_system_user.html:16
|
||||
#: assets/templates/assets/system_user_list.html:16
|
||||
#: assets/views/system_user.py:49
|
||||
#: assets/views/system_user.py:47
|
||||
msgid "Create system user"
|
||||
msgstr "创建系统用户"
|
||||
|
||||
|
@ -657,6 +657,7 @@ msgstr "其它"
|
|||
#: assets/templates/assets/admin_user_create_update.html:45
|
||||
#: assets/templates/assets/asset_bulk_update.html:23
|
||||
#: assets/templates/assets/asset_create.html:40
|
||||
#: assets/templates/assets/asset_group_create.html:16
|
||||
#: assets/templates/assets/asset_update.html:55
|
||||
#: assets/templates/assets/cluster_create_update.html:54
|
||||
#: perms/templates/perms/asset_permission_create_update.html:67
|
||||
|
@ -675,6 +676,7 @@ msgstr "重置"
|
|||
#: assets/templates/assets/admin_user_create_update.html:46
|
||||
#: assets/templates/assets/asset_bulk_update.html:24
|
||||
#: assets/templates/assets/asset_create.html:41
|
||||
#: assets/templates/assets/asset_group_create.html:17
|
||||
#: assets/templates/assets/asset_list.html:55
|
||||
#: assets/templates/assets/asset_update.html:56
|
||||
#: assets/templates/assets/cluster_create_update.html:55
|
||||
|
@ -711,6 +713,52 @@ msgstr "详情"
|
|||
msgid "Assets list"
|
||||
msgstr "资产列表"
|
||||
|
||||
#: assets/templates/assets/admin_user_assets.html:24
|
||||
#: assets/templates/assets/admin_user_detail.html:24
|
||||
#: assets/templates/assets/admin_user_list.html:83
|
||||
#: assets/templates/assets/asset_detail.html:24
|
||||
#: assets/templates/assets/asset_group_detail.html:18
|
||||
#: assets/templates/assets/asset_group_detail.html:172
|
||||
#: assets/templates/assets/asset_group_list.html:42
|
||||
#: assets/templates/assets/asset_list.html:95
|
||||
#: assets/templates/assets/cluster_assets.html:170
|
||||
#: assets/templates/assets/cluster_detail.html:25
|
||||
#: assets/templates/assets/cluster_list.html:43
|
||||
#: assets/templates/assets/system_user_asset.html:25
|
||||
#: assets/templates/assets/system_user_detail.html:26
|
||||
#: assets/templates/assets/system_user_list.html:84
|
||||
#: perms/templates/perms/asset_permission_detail.html:30
|
||||
#: perms/templates/perms/asset_permission_list.html:73
|
||||
#: terminal/templates/terminal/terminal_detail.html:16
|
||||
#: terminal/templates/terminal/terminal_list.html:71
|
||||
#: users/templates/users/user_detail.html:25
|
||||
#: users/templates/users/user_group_detail.html:28
|
||||
#: users/templates/users/user_group_list.html:39
|
||||
#: users/templates/users/user_list.html:76
|
||||
msgid "Update"
|
||||
msgstr "更新"
|
||||
|
||||
#: assets/templates/assets/admin_user_assets.html:28
|
||||
#: assets/templates/assets/admin_user_detail.html:28
|
||||
#: assets/templates/assets/admin_user_list.html:84
|
||||
#: assets/templates/assets/asset_detail.html:28
|
||||
#: assets/templates/assets/asset_group_list.html:43
|
||||
#: assets/templates/assets/asset_list.html:96
|
||||
#: assets/templates/assets/cluster_detail.html:29
|
||||
#: assets/templates/assets/cluster_list.html:44
|
||||
#: assets/templates/assets/system_user_list.html:85
|
||||
#: ops/templates/ops/task_list.html:71
|
||||
#: perms/templates/perms/asset_permission_detail.html:34
|
||||
#: perms/templates/perms/asset_permission_list.html:74
|
||||
#: terminal/templates/terminal/terminal_list.html:73
|
||||
#: users/templates/users/user_detail.html:29
|
||||
#: users/templates/users/user_group_detail.html:32
|
||||
#: users/templates/users/user_group_list.html:41
|
||||
#: users/templates/users/user_list.html:80
|
||||
#: users/templates/users/user_list.html:84
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: assets/templates/assets/admin_user_assets.html:37
|
||||
#: assets/templates/assets/asset_group_detail.html:26
|
||||
#: perms/templates/perms/asset_permission_asset.html:35
|
||||
|
@ -760,7 +808,7 @@ msgstr "任务已下发,查看左侧资产状态"
|
|||
|
||||
#: assets/templates/assets/admin_user_create_update.html:16
|
||||
#: assets/templates/assets/admin_user_list.html:14
|
||||
#: assets/views/admin_user.py:45
|
||||
#: assets/views/admin_user.py:48
|
||||
msgid "Create admin user"
|
||||
msgstr "创建管理用户"
|
||||
|
||||
|
@ -780,7 +828,7 @@ msgstr "使用集群管理用户"
|
|||
#: users/templates/users/user_detail.html:338
|
||||
#: users/templates/users/user_detail.html:363
|
||||
#: users/templates/users/user_detail.html:386
|
||||
#: users/templates/users/user_group_create_update.html:46
|
||||
#: users/templates/users/user_group_create_update.html:32
|
||||
#: users/templates/users/user_group_list.html:82
|
||||
#: users/templates/users/user_list.html:184
|
||||
#: users/templates/users/user_profile.html:181
|
||||
|
@ -817,41 +865,13 @@ msgstr "比例"
|
|||
msgid "Action"
|
||||
msgstr "动作"
|
||||
|
||||
#: assets/templates/assets/admin_user_list.html:83
|
||||
#: assets/templates/assets/asset_group_detail.html:172
|
||||
#: assets/templates/assets/asset_group_list.html:42
|
||||
#: assets/templates/assets/asset_list.html:95
|
||||
#: assets/templates/assets/cluster_assets.html:170
|
||||
#: assets/templates/assets/cluster_list.html:43
|
||||
#: assets/templates/assets/system_user_list.html:84
|
||||
#: perms/templates/perms/asset_permission_list.html:73
|
||||
#: terminal/templates/terminal/terminal_list.html:71
|
||||
#: users/templates/users/user_group_list.html:39
|
||||
#: users/templates/users/user_list.html:76
|
||||
msgid "Update"
|
||||
msgstr "更新"
|
||||
|
||||
#: assets/templates/assets/admin_user_list.html:84
|
||||
#: assets/templates/assets/asset_group_list.html:43
|
||||
#: assets/templates/assets/asset_list.html:96
|
||||
#: assets/templates/assets/cluster_list.html:44
|
||||
#: assets/templates/assets/system_user_list.html:85
|
||||
#: ops/templates/ops/task_list.html:70
|
||||
#: perms/templates/perms/asset_permission_list.html:74
|
||||
#: terminal/templates/terminal/terminal_list.html:73
|
||||
#: users/templates/users/user_group_list.html:41
|
||||
#: users/templates/users/user_list.html:80
|
||||
#: users/templates/users/user_list.html:84
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: assets/templates/assets/asset_create.html:28
|
||||
#: assets/templates/assets/asset_update.html:33
|
||||
msgid "Group"
|
||||
msgstr "组"
|
||||
|
||||
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:180
|
||||
#: assets/views/cluster.py:98
|
||||
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:186
|
||||
#: assets/views/cluster.py:103
|
||||
msgid "Asset detail"
|
||||
msgstr "资产详情"
|
||||
|
||||
|
@ -937,8 +957,8 @@ msgstr "添加"
|
|||
msgid "Remove"
|
||||
msgstr "移除"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:7 assets/views/group.py:31
|
||||
#: assets/views/group.py:94
|
||||
#: assets/templates/assets/asset_group_list.html:7 assets/views/group.py:35
|
||||
#: assets/views/group.py:88
|
||||
msgid "Create asset group"
|
||||
msgstr "创建资产组"
|
||||
|
||||
|
@ -1062,6 +1082,7 @@ msgid "Test assets connective"
|
|||
msgstr "测试资产可连接性"
|
||||
|
||||
#: assets/templates/assets/cluster_assets.html:77
|
||||
#: ops/templates/ops/task_list.html:70
|
||||
msgid "Run"
|
||||
msgstr "执行"
|
||||
|
||||
|
@ -1083,7 +1104,7 @@ msgstr "任务已下发,查看左侧资产状态"
|
|||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
#: assets/templates/assets/cluster_list.html:11 assets/views/cluster.py:39
|
||||
#: assets/templates/assets/cluster_list.html:11 assets/views/cluster.py:43
|
||||
msgid "Create Cluster"
|
||||
msgstr "创建Cluster"
|
||||
|
||||
|
@ -1180,85 +1201,86 @@ msgstr "连接性"
|
|||
msgid "Connect"
|
||||
msgstr "连接"
|
||||
|
||||
#: assets/views/admin_user.py:28
|
||||
#: assets/views/admin_user.py:30
|
||||
msgid "Admin user list"
|
||||
msgstr "管理用户列表"
|
||||
|
||||
#: assets/views/admin_user.py:52
|
||||
#, python-brace-format
|
||||
msgid "Create admin user <a href=\"{url}\">{name}</a> successfully."
|
||||
msgstr "创建管理用户 <a href=\"{url}\">{name}</a> 成功"
|
||||
|
||||
#: assets/views/admin_user.py:68
|
||||
#: assets/views/admin_user.py:64
|
||||
msgid "Update admin user"
|
||||
msgstr "更新管理用户"
|
||||
|
||||
#: assets/views/admin_user.py:89 assets/views/admin_user.py:116
|
||||
#: assets/views/admin_user.py:80 assets/views/admin_user.py:107
|
||||
msgid "Admin user detail"
|
||||
msgstr "管理用户详情"
|
||||
|
||||
#: assets/views/asset.py:48 assets/views/asset.py:62
|
||||
#: assets/views/asset.py:49 assets/views/asset.py:62
|
||||
msgid "Asset list"
|
||||
msgstr "资产列表"
|
||||
|
||||
#: assets/views/asset.py:142
|
||||
#: assets/views/asset.py:145
|
||||
msgid "Bulk update asset"
|
||||
msgstr "批量更新资产"
|
||||
|
||||
#: assets/views/asset.py:159
|
||||
#: assets/views/asset.py:162
|
||||
msgid "Update asset"
|
||||
msgstr "编辑资产"
|
||||
|
||||
#: assets/views/asset.py:292
|
||||
#: assets/views/asset.py:298
|
||||
msgid "already exists"
|
||||
msgstr "已经存在"
|
||||
|
||||
#: assets/views/cluster.py:23
|
||||
#: assets/views/cluster.py:27
|
||||
msgid "Cluster list"
|
||||
msgstr "集群列表"
|
||||
|
||||
#: assets/views/cluster.py:38 assets/views/cluster.py:65
|
||||
#: assets/views/system_user.py:112
|
||||
#: assets/views/cluster.py:42 assets/views/cluster.py:70
|
||||
#: assets/views/system_user.py:98
|
||||
msgid "assets"
|
||||
msgstr "资产管理"
|
||||
|
||||
#: assets/views/cluster.py:66
|
||||
#: assets/views/cluster.py:71
|
||||
msgid "Update Cluster"
|
||||
msgstr "更新Cluster"
|
||||
|
||||
#: assets/views/cluster.py:81
|
||||
#: assets/views/cluster.py:86
|
||||
msgid "Cluster detail"
|
||||
msgstr "集群详情"
|
||||
|
||||
#: assets/views/group.py:54
|
||||
#: assets/views/group.py:53
|
||||
msgid "Asset group list"
|
||||
msgstr "资产组列表"
|
||||
|
||||
#: assets/views/group.py:72
|
||||
#: assets/views/group.py:70
|
||||
msgid "Asset group detail"
|
||||
msgstr "资产组详情"
|
||||
|
||||
#: assets/views/system_user.py:30
|
||||
#: assets/views/system_user.py:31
|
||||
msgid "System user list"
|
||||
msgstr "系统用户列表"
|
||||
|
||||
#: assets/views/system_user.py:57
|
||||
#, python-brace-format
|
||||
msgid "Create system user <a href=\"{url}\">{name}</a> successfully."
|
||||
msgstr "创建系统用户 <a href=\"{url}\">{name}</a> 成功"
|
||||
|
||||
#: assets/views/system_user.py:72
|
||||
#: assets/views/system_user.py:63
|
||||
msgid "Update system user"
|
||||
msgstr "更新系统用户"
|
||||
|
||||
#: assets/views/system_user.py:92
|
||||
#: assets/views/system_user.py:78
|
||||
msgid "System user detail"
|
||||
msgstr "系统用户详情"
|
||||
|
||||
#: assets/views/system_user.py:113
|
||||
#: assets/views/system_user.py:99
|
||||
msgid "System user asset"
|
||||
msgstr "系统用户集群资产"
|
||||
|
||||
#: common/const.py:6
|
||||
#, python-format
|
||||
#| msgid "User group <a href={url}> {name} </a> was created successfully"
|
||||
msgid "<b>%(name)s</b> was created successfully"
|
||||
msgstr "<b>%(name)s</b> 创建成功"
|
||||
|
||||
#: common/const.py:7
|
||||
#, python-format
|
||||
msgid "<b>%(name)s</b> was updated successfully"
|
||||
msgstr "<b>%(name)s</b> 更新成功"
|
||||
|
||||
#: common/mixins.py:29
|
||||
msgid "is discard"
|
||||
msgstr ""
|
||||
|
@ -1517,6 +1539,10 @@ msgstr "成功"
|
|||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#: ops/templates/ops/task_list.html:125
|
||||
msgid "Task start: "
|
||||
msgstr "任务开始: "
|
||||
|
||||
#: ops/views.py:36 ops/views.py:52 ops/views.py:65 ops/views.py:78
|
||||
#: ops/views.py:91 ops/views.py:104 ops/views.py:117
|
||||
msgid "Ops"
|
||||
|
@ -1544,7 +1570,7 @@ msgstr "选择用户"
|
|||
#: terminal/templates/terminal/session_list.html:33
|
||||
#: terminal/templates/terminal/session_list.html:71 users/forms.py:187
|
||||
#: users/models/user.py:31 users/templates/users/user_group_detail.html:78
|
||||
#: users/views/user.py:348
|
||||
#: users/views/user.py:345
|
||||
msgid "User"
|
||||
msgstr "用户"
|
||||
|
||||
|
@ -1658,47 +1684,32 @@ msgstr "选择用户"
|
|||
msgid "Add user group to asset permission"
|
||||
msgstr "添加用户组"
|
||||
|
||||
#: perms/views.py:27 perms/views.py:77 perms/views.py:103 perms/views.py:128
|
||||
#: perms/views.py:165 perms/views.py:195 templates/_nav.html:30
|
||||
#: perms/views.py:28 perms/views.py:44 perms/views.py:60 perms/views.py:74
|
||||
#: perms/views.py:111 perms/views.py:141 templates/_nav.html:30
|
||||
msgid "Perms"
|
||||
msgstr "权限管理"
|
||||
|
||||
#: perms/views.py:28
|
||||
#: perms/views.py:29
|
||||
msgid "Asset permission list"
|
||||
msgstr "资产授权列表"
|
||||
|
||||
#: perms/views.py:63
|
||||
#, python-brace-format
|
||||
msgid "Create asset permission <a href=\"{url}\"> {name} </a> successfully."
|
||||
msgstr "创建授权 <a href=\"{url}\"> {name} </a> 成功"
|
||||
|
||||
#: perms/views.py:78
|
||||
#: perms/views.py:45
|
||||
msgid "Create asset permission"
|
||||
msgstr "创建权限规则"
|
||||
|
||||
#: perms/views.py:89
|
||||
#, python-brace-format
|
||||
msgid "Create asset permission <a href=\"{url}\"> {name} </a> success."
|
||||
msgstr "创建授权 <a href=\"{url}\"> {name} </a> 成功"
|
||||
|
||||
#: perms/views.py:104
|
||||
#: perms/views.py:61
|
||||
msgid "Update asset permission"
|
||||
msgstr "更新资产授权"
|
||||
|
||||
#: perms/views.py:115
|
||||
#, python-brace-format
|
||||
msgid "Update asset permission <a href=\"{url}\"> {name} </a> success."
|
||||
msgstr "更新授权 <a href=\"{url}\"> {name} </a> 成功"
|
||||
|
||||
#: perms/views.py:129
|
||||
#: perms/views.py:75
|
||||
msgid "Asset permission detail"
|
||||
msgstr "资产授权详情"
|
||||
|
||||
#: perms/views.py:166
|
||||
#: perms/views.py:112
|
||||
msgid "Asset permission user list"
|
||||
msgstr "资产授权包含用户"
|
||||
|
||||
#: perms/views.py:196
|
||||
#: perms/views.py:142
|
||||
msgid "Asset permission asset list"
|
||||
msgstr "资产组授权包含资产"
|
||||
|
||||
|
@ -1716,32 +1727,28 @@ msgstr "帮助"
|
|||
#: users/templates/users/user_profile.html:17
|
||||
#: users/templates/users/user_profile_update.html:37
|
||||
#: users/templates/users/user_profile_update.html:57
|
||||
#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:323
|
||||
#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:320
|
||||
msgid "Profile"
|
||||
msgstr "个人信息"
|
||||
|
||||
#: templates/_header_bar.html:34
|
||||
msgid "Profile settings"
|
||||
msgstr "个人信息设置"
|
||||
|
||||
#: templates/_header_bar.html:38
|
||||
#: templates/_header_bar.html:37
|
||||
msgid "Admin page"
|
||||
msgstr "管理页面"
|
||||
|
||||
#: templates/_header_bar.html:40
|
||||
#: templates/_header_bar.html:39
|
||||
msgid "User page"
|
||||
msgstr "用户页面"
|
||||
|
||||
#: templates/_header_bar.html:43
|
||||
#: templates/_header_bar.html:42
|
||||
msgid "Logout"
|
||||
msgstr "注销登录"
|
||||
|
||||
#: templates/_header_bar.html:47 users/templates/users/login.html:42
|
||||
#: templates/_header_bar.html:46 users/templates/users/login.html:42
|
||||
#: users/templates/users/login.html:61
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
#: templates/_header_bar.html:60 templates/_nav.html:4
|
||||
#: templates/_header_bar.html:59 templates/_nav.html:4
|
||||
msgid "Dashboard"
|
||||
msgstr "仪表盘"
|
||||
|
||||
|
@ -1775,11 +1782,11 @@ msgstr ""
|
|||
msgid "Close"
|
||||
msgstr "关闭"
|
||||
|
||||
#: templates/_nav.html:9 users/views/group.py:30 users/views/group.py:48
|
||||
#: users/views/group.py:74 users/views/group.py:91 users/views/login.py:193
|
||||
#: users/views/login.py:242 users/views/user.py:55 users/views/user.py:70
|
||||
#: users/views/user.py:95 users/views/user.py:151 users/views/user.py:308
|
||||
#: users/views/user.py:322 users/views/user.py:366 users/views/user.py:388
|
||||
#: templates/_nav.html:9 users/views/group.py:28 users/views/group.py:44
|
||||
#: users/views/group.py:62 users/views/group.py:79 users/views/login.py:193
|
||||
#: users/views/login.py:242 users/views/user.py:57 users/views/user.py:72
|
||||
#: users/views/user.py:92 users/views/user.py:148 users/views/user.py:305
|
||||
#: users/views/user.py:319 users/views/user.py:363 users/views/user.py:385
|
||||
msgid "Users"
|
||||
msgstr "用户管理"
|
||||
|
||||
|
@ -2152,7 +2159,7 @@ msgstr "Agent"
|
|||
msgid "Date login"
|
||||
msgstr "登录日期"
|
||||
|
||||
#: users/models/user.py:30 users/models/user.py:255
|
||||
#: users/models/user.py:30 users/models/user.py:259
|
||||
msgid "Administrator"
|
||||
msgstr "管理员"
|
||||
|
||||
|
@ -2191,7 +2198,7 @@ msgstr "二次验证"
|
|||
msgid "Public key"
|
||||
msgstr "ssh公钥"
|
||||
|
||||
#: users/models/user.py:258
|
||||
#: users/models/user.py:262
|
||||
msgid "Administrator is the super user of system"
|
||||
msgstr "Administrator是初始的超级管理员"
|
||||
|
||||
|
@ -2293,7 +2300,7 @@ msgid "Setting"
|
|||
msgstr "设置"
|
||||
|
||||
#: users/templates/users/user_create.html:4
|
||||
#: users/templates/users/user_list.html:16 users/views/user.py:70
|
||||
#: users/templates/users/user_list.html:16 users/views/user.py:72
|
||||
msgid "Create user"
|
||||
msgstr "创建用户"
|
||||
|
||||
|
@ -2304,7 +2311,7 @@ msgstr "生成重置密码连接,通过邮件发送给用户"
|
|||
#: users/templates/users/user_detail.html:19
|
||||
#: users/templates/users/user_granted_asset.html:18
|
||||
#: users/templates/users/user_group_granted_asset.html:18
|
||||
#: users/views/user.py:152
|
||||
#: users/views/user.py:149
|
||||
msgid "User detail"
|
||||
msgstr "用户详情"
|
||||
|
||||
|
@ -2379,11 +2386,11 @@ msgstr "授权资产"
|
|||
msgid "Asset groups granted of "
|
||||
msgstr "授权资产组"
|
||||
|
||||
#: users/templates/users/user_group_create_update.html:45
|
||||
#: users/templates/users/user_group_create_update.html:31
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: users/templates/users/user_group_detail.html:22 users/views/group.py:92
|
||||
#: users/templates/users/user_group_detail.html:22 users/views/group.py:80
|
||||
msgid "User group detail"
|
||||
msgstr "资产组详情"
|
||||
|
||||
|
@ -2395,7 +2402,7 @@ msgstr "添加用户"
|
|||
msgid "Valid"
|
||||
msgstr "可用"
|
||||
|
||||
#: users/templates/users/user_group_list.html:5 users/views/group.py:49
|
||||
#: users/templates/users/user_group_list.html:5 users/views/group.py:45
|
||||
msgid "Create user group"
|
||||
msgstr "创建用户组"
|
||||
|
||||
|
@ -2433,8 +2440,8 @@ msgstr "用户删除失败"
|
|||
msgid "OTP"
|
||||
msgstr ""
|
||||
|
||||
#: users/templates/users/user_profile.html:100 users/views/user.py:181
|
||||
#: users/views/user.py:233
|
||||
#: users/templates/users/user_profile.html:100 users/views/user.py:178
|
||||
#: users/views/user.py:230
|
||||
msgid "User groups"
|
||||
msgstr "用户组"
|
||||
|
||||
|
@ -2458,7 +2465,7 @@ msgstr "指纹"
|
|||
msgid "Update public key"
|
||||
msgstr "更新密钥"
|
||||
|
||||
#: users/templates/users/user_update.html:4 users/views/user.py:95
|
||||
#: users/templates/users/user_update.html:4 users/views/user.py:92
|
||||
msgid "Update user"
|
||||
msgstr "编辑用户"
|
||||
|
||||
|
@ -2592,17 +2599,11 @@ msgstr "禁用或失效"
|
|||
msgid "Password or SSH public key invalid"
|
||||
msgstr "密码或秘钥不合法"
|
||||
|
||||
#: users/views/group.py:31
|
||||
#: users/views/group.py:29
|
||||
msgid "User group list"
|
||||
msgstr "用户组列表"
|
||||
|
||||
#: users/views/group.py:43
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Create user <a href=\"{url}\">{name}</a> successfully."
|
||||
msgid "User group <a href={url}> {name} </a> was created successfully"
|
||||
msgstr "创建用户 <a href=\"{url}\">{name}</a> 成功"
|
||||
|
||||
#: users/views/group.py:75
|
||||
#: users/views/group.py:63
|
||||
msgid "Update user group"
|
||||
msgstr "编辑用户组"
|
||||
|
||||
|
@ -2655,37 +2656,36 @@ msgstr "首次登陆"
|
|||
msgid "Login log list"
|
||||
msgstr "登录日志"
|
||||
|
||||
#: users/views/user.py:56
|
||||
#: users/views/user.py:58
|
||||
msgid "User list"
|
||||
msgstr "用户列表"
|
||||
|
||||
#: users/views/user.py:66 users/views/user.py:335
|
||||
#: users/views/user.py:102
|
||||
msgid "Bulk update user success"
|
||||
msgstr "批量更新用户成功"
|
||||
|
||||
#: users/views/user.py:207
|
||||
msgid "Invalid file."
|
||||
msgstr "文件不合法"
|
||||
|
||||
#: users/views/user.py:306
|
||||
msgid "User granted assets"
|
||||
msgstr "用户授权资产"
|
||||
|
||||
#: users/views/user.py:332
|
||||
#, python-brace-format
|
||||
msgid "Create user <a href=\"{url}\">{name}</a> successfully."
|
||||
msgstr "创建用户 <a href=\"{url}\">{name}</a> 成功"
|
||||
|
||||
#: users/views/user.py:105
|
||||
msgid "Bulk update user success"
|
||||
msgstr "批量更新用户成功"
|
||||
|
||||
#: users/views/user.py:210
|
||||
msgid "Invalid file."
|
||||
msgstr "文件不合法"
|
||||
|
||||
#: users/views/user.py:309
|
||||
msgid "User granted assets"
|
||||
msgstr "用户授权资产"
|
||||
|
||||
#: users/views/user.py:349
|
||||
#: users/views/user.py:346
|
||||
msgid "Profile setting"
|
||||
msgstr "个人信息设置"
|
||||
|
||||
#: users/views/user.py:367
|
||||
#: users/views/user.py:364
|
||||
msgid "Password update"
|
||||
msgstr "密码更新"
|
||||
|
||||
#: users/views/user.py:389
|
||||
#: users/views/user.py:386
|
||||
msgid "Public key update"
|
||||
msgstr "秘钥更新"
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ from django.contrib.messages.views import SuccessMessageMixin
|
|||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
from django.contrib import messages
|
||||
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from .hands import AdminUserRequiredMixin, User, UserGroup, SystemUser, \
|
||||
Asset, AssetGroup
|
||||
from .models import AssetPermission
|
||||
|
@ -31,46 +32,12 @@ class AssetPermissionListView(AdminUserRequiredMixin, ListView):
|
|||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
class MessageMixin:
|
||||
def form_valid(self, form):
|
||||
response = super().form_valid(form)
|
||||
errors = self.object.check_system_user_in_assets()
|
||||
if errors:
|
||||
message = self.get_warning_messages(errors)
|
||||
messages.warning(self.request, message)
|
||||
else:
|
||||
message = self.get_success_message(form.cleaned_data)
|
||||
messages.success(self.request, message)
|
||||
|
||||
success_message = self.get_success_message(form.cleaned_data)
|
||||
if success_message:
|
||||
messages.success(self.request, success_message)
|
||||
return response
|
||||
|
||||
@staticmethod
|
||||
def get_warning_messages(errors):
|
||||
message = "<b><i class='fa fa-warning'></i>WARNING: System user " \
|
||||
"should in behind clusters, so that " \
|
||||
"system user cat auto push to the cluster assets:</b> <br>"
|
||||
for system_user, clusters in errors.items():
|
||||
message += " >>> {}: {} ".format(system_user.name, ", ".join((cluster.name for cluster in clusters)))
|
||||
return message
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse_lazy('perms:asset-permission-detail',
|
||||
kwargs={'pk': self.object.pk})
|
||||
success_message = _(
|
||||
'Create asset permission <a href="{url}"> {name} </a> '
|
||||
'successfully.'.format(url=url, name=self.object.name))
|
||||
return success_message
|
||||
|
||||
|
||||
class AssetPermissionCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
||||
model = AssetPermission
|
||||
form_class = AssetPermissionForm
|
||||
template_name = 'perms/asset_permission_create_update.html'
|
||||
success_url = reverse_lazy('perms:asset-permission-list')
|
||||
warning = None
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -80,23 +47,13 @@ class AssetPermissionCreateView(AdminUserRequiredMixin, SuccessMessageMixin, Cre
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse_lazy(
|
||||
'perms:asset-permission-detail',
|
||||
kwargs={'pk': self.object.pk}
|
||||
)
|
||||
success_message = _(
|
||||
'Create asset permission <a href="{url}"> {name} </a> '
|
||||
'success.'.format(url=url, name=self.object.name)
|
||||
)
|
||||
return success_message
|
||||
|
||||
|
||||
class AssetPermissionUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = AssetPermission
|
||||
form_class = AssetPermissionForm
|
||||
template_name = 'perms/asset_permission_create_update.html'
|
||||
success_url = reverse_lazy("perms:asset-permission-list")
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -106,17 +63,6 @@ class AssetPermissionUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, Upd
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse_lazy(
|
||||
'perms:asset-permission-detail',
|
||||
kwargs={'pk': self.object.pk}
|
||||
)
|
||||
success_message = _(
|
||||
'Update asset permission <a href="{url}"> {name} </a> '
|
||||
'success.'.format(url=url, name=self.object.name)
|
||||
)
|
||||
return success_message
|
||||
|
||||
|
||||
class AssetPermissionDetailView(AdminUserRequiredMixin, DetailView):
|
||||
template_name = 'perms/asset_permission_detail.html'
|
||||
|
|
|
@ -25,20 +25,6 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_field form.name layout="horizontal" %}
|
||||
{% bootstrap_field form.users layout="horizontal" %}
|
||||
{# <div class="form-group">#}
|
||||
{# <label for="users" class="col-sm-2 control-label">{% trans 'Users' %}</label>#}
|
||||
{# <div class="col-sm-9">#}
|
||||
{# <select name="users" id="id_users" data-placeholder="{% trans 'Select User' %}" class="select2 form-control m-b" multiple tabindex="2">#}
|
||||
{# {% for user in users %}#}
|
||||
{# {% if user.id in group_users %}#}
|
||||
{# <option value="{{ user.id }}" selected>{{ user.name }}</option>#}
|
||||
{# {% else %}#}
|
||||
{# <option value="{{ user.id }}">{{ user.name }}</option>#}
|
||||
{# {% endif %}#}
|
||||
{# {% endfor %}#}
|
||||
{# </select>#}
|
||||
{# </div>#}
|
||||
{# </div>#}
|
||||
{% bootstrap_field form.comment layout="horizontal" %}
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4 col-sm-offset-2">
|
||||
|
@ -57,7 +43,9 @@
|
|||
{% block custom_foot_js %}
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('.select2').select2();
|
||||
$('.select2').select2({
|
||||
closeOnSelect: false
|
||||
});
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,17 +2,15 @@
|
|||
|
||||
from __future__ import unicode_literals
|
||||
from django import forms
|
||||
from django.shortcuts import reverse, redirect
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import ListView
|
||||
from django.views.generic.base import TemplateView
|
||||
from django.views.generic.edit import CreateView, UpdateView, FormMixin
|
||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||
from django.views.generic.edit import CreateView, UpdateView
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
|
||||
from common.utils import get_logger
|
||||
from perms.models import AssetPermission
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from ..models import User, UserGroup
|
||||
from ..utils import AdminUserRequiredMixin
|
||||
from .. import forms
|
||||
|
@ -39,9 +37,7 @@ class UserGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVie
|
|||
form_class = forms.UserGroupForm
|
||||
template_name = 'users/user_group_create_update.html'
|
||||
success_url = reverse_lazy('users:user-group-list')
|
||||
success_message = _(
|
||||
'User group <a href={url}> {name} </a> was created successfully'
|
||||
)
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {
|
||||
|
@ -51,21 +47,13 @@ class UserGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVie
|
|||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse_lazy(
|
||||
'users:user-group-detail',
|
||||
kwargs={'pk': self.object.id}
|
||||
)
|
||||
return self.success_message.format(
|
||||
url=url, name=self.object.name
|
||||
)
|
||||
|
||||
|
||||
class UserGroupUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class UserGroupUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = UserGroup
|
||||
form_class = forms.UserGroupForm
|
||||
template_name = 'users/user_group_create_update.html'
|
||||
success_url = reverse_lazy('users:user-group-list')
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
users = User.objects.all()
|
||||
|
|
|
@ -27,12 +27,14 @@ from django.views.generic.detail import DetailView, SingleObjectMixin
|
|||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.contrib.auth import logout as auth_logout
|
||||
|
||||
from common.const import create_success_msg, update_success_msg
|
||||
from common.mixins import JSONResponseMixin
|
||||
from common.utils import get_logger, get_object_or_none, is_uuid
|
||||
from .. import forms
|
||||
from ..models import User, UserGroup
|
||||
from ..utils import AdminUserRequiredMixin
|
||||
from ..signals import on_user_created
|
||||
from common.mixins import JSONResponseMixin
|
||||
from common.utils import get_logger, get_object_or_none, is_uuid
|
||||
|
||||
|
||||
__all__ = [
|
||||
'UserListView', 'UserCreateView', 'UserDetailView',
|
||||
|
@ -63,7 +65,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
|||
form_class = forms.UserCreateUpdateForm
|
||||
template_name = 'users/user_create.html'
|
||||
success_url = reverse_lazy('users:user-list')
|
||||
success_message = _('Create user <a href="{url}">{name}</a> successfully.')
|
||||
success_message = create_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
@ -77,19 +79,14 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
|
|||
on_user_created.send(self.__class__, user=user)
|
||||
return super().form_valid(form)
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
url = reverse_lazy('users:user-detail', kwargs={'pk': self.object.pk})
|
||||
return self.success_message.format(
|
||||
url=url, name=self.object.name
|
||||
)
|
||||
|
||||
|
||||
class UserUpdateView(AdminUserRequiredMixin, UpdateView):
|
||||
class UserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView):
|
||||
model = User
|
||||
form_class = forms.UserCreateUpdateForm
|
||||
template_name = 'users/user_update.html'
|
||||
context_object_name = 'user_object'
|
||||
success_url = reverse_lazy('users:user-list')
|
||||
success_message = update_success_msg
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {'app': _('Users'), 'action': _('Update user')}
|
||||
|
|
Loading…
Reference in New Issue