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