Commit 72a82c41 authored by ibuler's avatar ibuler

[Update] 修改 success message, 添加资产组时可以添加资产

parent 450a9495
......@@ -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)
def _save_m2m(self):
super(AssetGroupForm, self)._save_m2m()
assets = self.cleaned_data['assets']
self.instance.assets.clear()
self.instance.assets.add(*tuple(assets))
initial.update({
'assets': instance.assets.all(),
})
kwargs['initial'] = initial
super().__init__(**kwargs)
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")
......
{% 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();
});
$('#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方法时,立即触发;')
$('.select2').select2({
closeOnSelect: false
});
});
$('#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 %}
\ No newline at end of file
......@@ -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
......
# 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):
......
# ~*~ 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'
......
# -*- 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")
\ No newline at end of file
......@@ -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': '',
}
......@@ -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
#, python-brace-format
msgid "Create user <a href=\"{url}\">{name}</a> successfully."
msgstr "创建用户 <a href=\"{url}\">{name}</a> 成功"
#: users/views/user.py:105
#: users/views/user.py:102
msgid "Bulk update user success"
msgstr "批量更新用户成功"
#: users/views/user.py:210
#: users/views/user.py:207
msgid "Invalid file."
msgstr "文件不合法"
#: users/views/user.py:309
#: users/views/user.py:306
msgid "User granted assets"
msgstr "用户授权资产"
#: users/views/user.py:349
#: 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: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')}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment