diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py index 0c1b83403..c93a30439 100644 --- a/apps/jumpserver/urls.py +++ b/apps/jumpserver/urls.py @@ -25,6 +25,7 @@ urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='base.html'), name='index'), url(r'^(api/)?users/', include('users.urls')), url(r'^assets/', include('assets.urls')), + url(r'^perms/', include('perms.urls')), url(r'^terminal/', include('webterminal.urls')), ] diff --git a/apps/perms/forms.py b/apps/perms/forms.py index 83f9fe65b..36cf3ff8f 100644 --- a/apps/perms/forms.py +++ b/apps/perms/forms.py @@ -4,14 +4,23 @@ from __future__ import absolute_import, unicode_literals from django import forms from django.utils.translation import ugettext_lazy as _ -from users.models import User, UserGroup -from assets.models import Asset, AssetGroup, SystemUser -from .models import UserAssetPerm +from .hands import User, UserGroup, Asset, AssetGroup, SystemUser +from .models import PermUserAsset -class UserAssetPermForm(forms.ModelForm): +class PermUserAssetForm(forms.ModelForm): class Meta: - model = UserAssetPerm + model = PermUserAsset fields = [ - 'assets', 'asset_groups', 'system_users', 'date_expired', 'comment' + 'user', 'action', 'assets', 'asset_groups', 'system_users', 'date_expired', 'comment' ] + widgets = { + 'user': forms.HiddenInput(attrs={'style': 'display: none'}), + 'assets': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select assets')}), + 'asset_groups': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select asset groups')}), + 'system_users': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select system users')}), + + } diff --git a/apps/perms/hands.py b/apps/perms/hands.py index e4d282927..2a0f5b43f 100644 --- a/apps/perms/hands.py +++ b/apps/perms/hands.py @@ -5,7 +5,8 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ - - +from users.utils import AdminUserRequiredMixin +from users.models import User, UserGroup +from assets.models import Asset, AssetGroup, SystemUser diff --git a/apps/perms/models.py b/apps/perms/models.py index f9c4a0726..e1108ce2f 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -23,7 +23,7 @@ class PermUserAsset(models.Model): date_expired = models.DateTimeField(default=date_expired_default, verbose_name=_('Date expired')) created_by = models.CharField(max_length=128, blank=True) date_created = models.DateTimeField(auto_now=True) - comment = models.TextField(verbose_name=_('Comment')) + comment = models.TextField(verbose_name=_('Comment'), blank=True) def __unicode__(self): return '%(id)s: %(user)s %(action)s' % { diff --git a/apps/perms/templates/perms/perm_user_asset_create_update.html b/apps/perms/templates/perms/perm_user_asset_create_update.html new file mode 100644 index 000000000..298f95cb4 --- /dev/null +++ b/apps/perms/templates/perms/perm_user_asset_create_update.html @@ -0,0 +1,80 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{% trans 'Create asset perm for ' %}{{ user.name }}
+ +
+
+
+ {% csrf_token %} + + {{ form.action|bootstrap_horizontal }} + {{ form.assets|bootstrap_horizontal }} + {{ form.asset_groups|bootstrap_horizontal }} + {{ form.system_users |bootstrap_horizontal }} + +
+ +
+
+ + +
+ {{ form.date_expired.errors }} +
+
+ {{ form.comment|bootstrap_horizontal }} + +
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + + +{% endblock %} \ No newline at end of file diff --git a/apps/perms/templates/perms/perm_user_asset_list.html b/apps/perms/templates/perms/perm_user_asset_list.html new file mode 100644 index 000000000..792716f0b --- /dev/null +++ b/apps/perms/templates/perms/perm_user_asset_list.html @@ -0,0 +1,66 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create perm " %} +{% endblock %} + +{% block table_head %} + + + + {% trans 'Name' %} + {% trans 'Username' %} + {% trans 'Role' %} + {% trans 'Asset num' %} + {% trans 'Asset group' %} + {% trans 'System user' %} + {% trans 'Active' %} + +{% endblock %} + +{% block table_body %} + {% for perm in page_obj %} + + + + + + + {{ user.name }} + + + {{ user.username }} + {{ user.get_role_display }} + 35/40 + 20 + 3 + + {% trans 'Create perm' %} + {% trans 'Flush' %} + + + {% endfor %} +{% endblock %} + +{% block content_bottom_left %} + +{% endblock %} + + diff --git a/apps/perms/templates/perms/perm_user_list.html b/apps/perms/templates/perms/perm_user_list.html index 8994ecce9..ac5e40871 100644 --- a/apps/perms/templates/perms/perm_user_list.html +++ b/apps/perms/templates/perms/perm_user_list.html @@ -2,6 +2,7 @@ {% load i18n %} {% load common_tags %} {% block content_left_head %} + {% trans "Batch create perm " %} {% endblock %} {% block table_head %} @@ -10,9 +11,8 @@ {% trans 'Name' %} {% trans 'Username' %} - {% trans 'User group' %} - {% trans 'Asset available' %} - {% trans 'Asset unavailable' %} + {% trans 'Role' %} + {% trans 'Asset num' %} {% trans 'Asset group' %} {% trans 'System user' %} {% trans 'Active' %} @@ -32,18 +32,12 @@ {{ user.username }} {{ user.get_role_display }} - {{ user.groups.all|join_queryset_attr:"name" }} - {{ user.name }} + 35/40 + 20 + 3 - {% if user.is_expired and user.is_active %} - - {% else %} - - {% endif %} - - - {% trans 'Update' %} - {% trans 'Delete' %} + {% trans 'Create perm' %} + {% trans 'Flush' %} {% endfor %} diff --git a/apps/perms/urls.py b/apps/perms/urls.py index e985480f2..4491b2dcf 100644 --- a/apps/perms/urls.py +++ b/apps/perms/urls.py @@ -7,9 +7,10 @@ app_name = 'perms' urlpatterns = [ # Resource asset url - url(r'^user$', views.PermUserAssetListView.as_view(), name='perm-user-list'), - # url(r'^user/(?P[0-9]+)/perm-asset/$', views.AssetListView.as_view(), name='perm-user-asset-list'), - # url(r'^user/(?P[0-9]+)/perm-asset/$', views.AssetListView.as_view(), name='perm-user-asset-list'), + url(r'^user$', views.PermUserListView.as_view(), name='perm-user-list'), + url(r'^user/(?P[0-9]+)/perm-asset/$', views.PermUserAssetListView.as_view(), name='perm-user-asset-list'), + url(r'^user/(?P[0-9]+)/perm-asset/create$', views.PermUserAssetCreateView.as_view(), + name='perm-user-asset-create'), # url(r'^user/(?P[0-9]+)$', views.AssetListView.as_view(), name='asset-list'), # url(r'^asset/create$', views.AssetCreateView.as_view(), name='asset-create'), # url(r'^asset/(?P[0-9]+)$', views.AssetDetailView.as_view(), name='asset-detail'), diff --git a/apps/perms/views.py b/apps/perms/views.py index 78d1a1a58..1932d899c 100644 --- a/apps/perms/views.py +++ b/apps/perms/views.py @@ -13,7 +13,7 @@ from django.views.generic.detail import DetailView, SingleObjectMixin from .hands import AdminUserRequiredMixin, User, UserGroup from .models import PermUserAsset, PermUserGroupAsset -from .forms import UserAssetPermForm +from .forms import PermUserAssetForm class PermUserListView(AdminUserRequiredMixin, ListView): @@ -35,7 +35,7 @@ class PermUserListView(AdminUserRequiredMixin, ListView): # Todo: Default order by lose asset connection num self.queryset = super(PermUserListView, self).get_queryset() self.keyword = keyword = self.request.GET.get('keyword', '') - self.sort = sort = self.request.GET.get('sort', '-date_created') + self.sort = sort = self.request.GET.get('sort', '-date_joined') if keyword: self.queryset = self.queryset.filter(Q(name__icontains=keyword) | @@ -46,58 +46,59 @@ class PermUserListView(AdminUserRequiredMixin, ListView): return self.queryset -class PermUserAssetListView(AdminUserRequiredMixin, ListView): - model = PermUserAsset +class PermUserAssetListView(AdminUserRequiredMixin, SingleObjectMixin, ListView): paginate_by = settings.CONFIG.DISPLAY_PER_PAGE - context_object_name = 'system_user_list' - template_name = 'assets/system_user_list.html' + context_object_name = 'perm_user_asset_list' + template_name = 'perms/perm_user_asset_list.html' + model = User + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=User.objects.all()) + return super(PermUserAssetListView, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = { 'app': _('Assets'), - 'action': _('System user list'), + 'action': _('User perm asset list'), 'keyword': self.request.GET.get('keyword', '') } kwargs.update(context) return super(PermUserAssetListView, self).get_context_data(**kwargs) def get_queryset(self): - # Todo: Default order by lose asset connection num - self.queryset = super(PermUserAssetListView, self).get_queryset() - self.keyword = keyword = self.request.GET.get('keyword', '') - self.sort = sort = self.request.GET.get('sort', '-date_created') - - if keyword: - self.queryset = self.queryset.filter(Q(name__icontains=keyword) | - Q(comment__icontains=keyword)) - - if sort: - self.queryset = self.queryset.order_by(sort) + self.queryset = self.object.permuserasset_set.all() return self.queryset -# -# -# class PermUserAssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): -# model = PermUserAsset -# form_class = PermUserAssetForm -# template_name = 'assets/system_user_create_update.html' -# success_url = reverse_lazy('assets:system-user-list') -# success_message = _('Create system user %s successfully.') -# -# def get_context_data(self, **kwargs): -# context = { -# 'app': _('Assets'), -# 'action': _('Create system user'), -# } -# kwargs.update(context) -# return super(PermUserAssetCreateView, self).get_context_data(**kwargs) -# -# def get_success_message(self, cleaned_data): -# return self.success_message % ( -# reverse_lazy('assets:system-user-detail', kwargs={'pk': self.object.pk}), -# self.object.name, -# ) -# -# + + +class PermUserAssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): + model = PermUserAsset + form_class = PermUserAssetForm + template_name = 'perms/perm_user_asset_create_update.html' + success_url = reverse_lazy('perms:perm-user-list') + success_message = _('Create user asset perm %s successfully.') + + def get_initial(self): + return {'user': self.get_object(queryset=User.objects.all())} + + def form_invalid(self, form): + print(form.errors) + return super(PermUserAssetCreateView, self).form_invalid(form) + + def get_context_data(self, **kwargs): + context = { + 'app': _('Perms'), + 'action': _('Create user asset perm'), + 'user': self.get_object(queryset=User.objects.all()), + } + kwargs.update(context) + return super(PermUserAssetCreateView, self).get_context_data(**kwargs) + + def get_success_message(self, cleaned_data): + return self.success_message % ( + reverse_lazy('perms:perm-user-asset-list', kwargs={'pk': self.object.user.id}) + ) + + # class PermUserAssetUpdateView(AdminUserRequiredMixin, UpdateView): # model = PermUserAsset # form_class = PermUserAssetForm diff --git a/apps/templates/_nav.html b/apps/templates/_nav.html index 9eee251ca..dbb2bf637 100644 --- a/apps/templates/_nav.html +++ b/apps/templates/_nav.html @@ -30,7 +30,7 @@ {% trans 'Perms' %}