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 }}
+
+
+
+
+
+
+
+{% 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' %}