diff --git a/apps/assets/api.py b/apps/assets/api.py index 27539eb09..bfd4d7200 100644 --- a/apps/assets/api.py +++ b/apps/assets/api.py @@ -1,32 +1,37 @@ # ~*~ coding: utf-8 ~*~ + from rest_framework import serializers -from .models import ( - AssetGroup,Asset,IDC,AssetExtend -) -from rest_framework import viewsets,serializers +from rest_framework import viewsets, serializers + +from .models import AssetGroup, Asset, IDC, AssetExtend + class AssetGroupSerializer(serializers.ModelSerializer): class Meta: model = AssetGroup - #exclude = [ - #'password', 'first_name', 'last_name', 'secret_key_otp', - #'private_key', 'public_key', 'avatar', - #] + # exclude = [ + # 'password', 'first_name', 'last_name', 'secret_key_otp', + # 'private_key', 'public_key', 'avatar', + # ] + class AssetSerializer(serializers.ModelSerializer): class Meta: model = Asset - #fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + # fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + class IDCSerializer(serializers.ModelSerializer): class Meta: model = IDC - #fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + # fields = ('id', 'title', 'code', 'linenos', 'language', 'style') class AssetGroupViewSet(viewsets.ModelViewSet): - """ - API endpoint that allows AssetGroup to be viewed or edited. + """ API endpoint that allows AssetGroup to be viewed or edited. + + some other comment + """ queryset = AssetGroup.objects.all() serializer_class = AssetGroupSerializer diff --git a/apps/assets/hands.py b/apps/assets/hands.py index 3dab35ec7..70dedfeb4 100644 --- a/apps/assets/hands.py +++ b/apps/assets/hands.py @@ -12,3 +12,4 @@ from users.utils import AdminUserRequiredMixin +from users.models import User, UserGroup diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py index a63d3d984..8a1733e68 100644 --- a/apps/assets/migrations/0001_initial.py +++ b/apps/assets/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-09-08 03:02 +# Generated by Django 1.10 on 2016-09-10 16:40 from __future__ import unicode_literals from django.db import migrations, models @@ -43,7 +43,7 @@ class Migration(migrations.Migration): ('port', models.IntegerField(blank=True, null=True, verbose_name='Port')), ('username', models.CharField(blank=True, max_length=16, null=True, verbose_name='Admin user')), ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Admin password')), - ('mac_addr', models.CharField(blank=True, max_length=20, null=True, verbose_name='Mac address')), + ('mac_address', models.CharField(blank=True, max_length=20, null=True, verbose_name='Mac address')), ('brand', models.CharField(blank=True, max_length=64, null=True, verbose_name='Brand')), ('cpu', models.CharField(blank=True, max_length=64, null=True, verbose_name='CPU')), ('memory', models.CharField(blank=True, max_length=128, null=True, verbose_name='Memory')), @@ -57,7 +57,7 @@ class Migration(migrations.Migration): ('is_active', models.BooleanField(default=True, verbose_name='Is active')), ('date_created', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), ('comment', models.CharField(blank=True, max_length=128, null=True, verbose_name='Comment')), - ('admin_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.AdminUser', verbose_name='Admin user')), + ('admin_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assets', to='assets.AdminUser', verbose_name='Admin user')), ], options={ 'db_table': 'asset', @@ -129,21 +129,21 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), - ('username', models.CharField(blank=True, max_length=16, verbose_name='Username')), - ('password', models.CharField(blank=True, max_length=256, verbose_name='Password')), - ('protocol', models.CharField(default='ssh', max_length=16, verbose_name='Protocol')), - ('private_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH private key')), - ('public_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH public key')), - ('is_default', models.BooleanField(default=True, verbose_name='As default')), + ('username', models.CharField(max_length=16, verbose_name='Username')), + ('_password', models.CharField(blank=True, max_length=256, verbose_name='Password')), + ('protocol', models.CharField(choices=[('ssh', 'ssh')], default='ssh', max_length=16, verbose_name='Protocol')), + ('_private_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH private key')), + ('_public_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH public key')), + ('as_default', models.BooleanField(default=False, verbose_name='As default')), ('auto_push', models.BooleanField(default=True, verbose_name='Auto push')), ('auto_update', models.BooleanField(default=True, verbose_name='Auto update pass/key')), - ('sudo', models.TextField(blank=True, max_length=4096, verbose_name='Sudo')), - ('shell', models.CharField(blank=True, max_length=64, verbose_name='Shell')), + ('sudo', models.TextField(default='/user/bin/whoami', max_length=4096, verbose_name='Sudo')), + ('shell', models.CharField(default='/bin/bash', max_length=64, verbose_name='Shell')), ('home', models.CharField(blank=True, max_length=64, verbose_name='Home')), - ('uid', models.IntegerField(blank=True, verbose_name='Uid')), - ('date_created', models.DateTimeField(auto_now=True, null=True)), + ('uid', models.IntegerField(blank=True, null=True, verbose_name='Uid')), + ('date_created', models.DateTimeField(auto_now=True)), ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), + ('comment', models.TextField(blank=True, max_length=128, verbose_name='Comment')), ], options={ 'db_table': 'system_user', @@ -177,7 +177,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='asset', name='system_user', - field=models.ManyToManyField(blank=True, to='assets.SystemUser', verbose_name='System User'), + field=models.ManyToManyField(blank=True, related_name='assets', to='assets.SystemUser', verbose_name='System User'), ), migrations.AddField( model_name='asset', diff --git a/apps/perms/models.py b/apps/perms/models.py index 85c8b4672..f9c4a0726 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -2,22 +2,77 @@ from __future__ import unicode_literals, absolute_import from django.db import models from django.utils.translation import ugettext_lazy as _ +from django.utils import timezone from users.models import User, UserGroup from assets.models import Asset, AssetGroup, SystemUser from common.utils import date_expired_default -class UserAssetPerm(models.Model): - user = models.ForeignKey(User, related_name='asset_perm', on_delete=models.CASCADE) - assets = models.ManyToManyField(Asset, related_name='user_perms', blank=True) - asset_groups = models.ManyToManyField(AssetGroup, related_name='user_perm', blank=True) - system_users = models.ManyToManyField(SystemUser, related_name='user_perm', blank=True) +class PermUserAsset(models.Model): + ACTION_CHOICE = ( + ('1', 'Allow'), + ('0', 'Deny'), + ) + + user = models.ForeignKey(User, on_delete=models.CASCADE) + action = models.CharField(choices=ACTION_CHOICE, max_length=8, default='1') + assets = models.ManyToManyField(Asset, blank=True) + asset_groups = models.ManyToManyField(AssetGroup, blank=True) + system_users = models.ManyToManyField(SystemUser, blank=True) + 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')) + + def __unicode__(self): + return '%(id)s: %(user)s %(action)s' % { + 'id': self.id, + 'user': self.user.username, + 'action': self.action, + } + + @property + def is_expired(self): + if self.date_expired > timezone.now(): + return False + else: + return True + + class Meta: + db_table = 'perm_user_asset' + + +class PermUserGroupAsset(models.Model): + ACTION_CHOICES = ( + ('0', 'Deny'), + ('1', 'Allow'), + ) + + user_group = models.ForeignKey(User, on_delete=models.CASCADE) + action = models.CharField(choices=ACTION_CHOICES, max_length=8, default='1') + assets = models.ManyToManyField(Asset, blank=True) + asset_groups = models.ManyToManyField(AssetGroup, blank=True) + system_users = models.ManyToManyField(SystemUser, blank=True) date_expired = models.DateTimeField(default=date_expired_default, verbose_name=_('Date expired')) created_by = models.CharField(max_length=128) date_created = models.DateTimeField(auto_now=True) comment = models.TextField(verbose_name=_('Comment')) + def __unicode__(self): + return '%(id)s: %(user)s %(action)s' % { + 'id': self.id, + 'user': self.user_group.name, + 'action': self.action, + } + + @property + def is_expired(self): + if self.date_expired > timezone.now(): + return False + else: + return True + + class Meta: + db_table = 'perm_user_group_asset' -class UserGroupAssetPerm(models.Model): - pass diff --git a/apps/perms/templates/perms/example.html b/apps/perms/templates/perms/example.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/perms/templates/perms/perm_user_list.html b/apps/perms/templates/perms/perm_user_list.html new file mode 100644 index 000000000..8994ecce9 --- /dev/null +++ b/apps/perms/templates/perms/perm_user_list.html @@ -0,0 +1,72 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} +{% endblock %} + +{% block table_head %} +