mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf(perms): 应用授权表添加字段,type和category
							parent
							
								
									8fa15b3378
								
							
						
					
					
						commit
						77c8ca5863
					
				| 
						 | 
				
			
			@ -133,4 +133,6 @@ class Application(CommonModelMixin, OrgModelMixin):
 | 
			
		|||
        ordering = ('name',)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return '{}({})'.format(self.name, self.get_category_display())
 | 
			
		||||
        category_display = self.get_category_display()
 | 
			
		||||
        type_display = self.get_type_display()
 | 
			
		||||
        return f'{self.name}({type_display})[{category_display}]'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
# Generated by Django 2.2.13 on 2020-10-21 07:14
 | 
			
		||||
# Generated by Django 2.2.13 on 2020-10-28 02:19
 | 
			
		||||
 | 
			
		||||
import common.utils.django
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
| 
						 | 
				
			
			@ -7,10 +7,12 @@ import django.utils.timezone
 | 
			
		|||
import uuid
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def old_perm_to_application_permission_json(old_perm):
 | 
			
		||||
def old_perm_to_application_permission_json(old_perm, category, _type):
 | 
			
		||||
    return {
 | 
			
		||||
        'id': old_perm.id,
 | 
			
		||||
        'name': old_perm.name,
 | 
			
		||||
        'category': category,
 | 
			
		||||
        'type': _type,
 | 
			
		||||
        'is_active': old_perm.is_active,
 | 
			
		||||
        'date_start': old_perm.date_start,
 | 
			
		||||
        'date_expired': old_perm.date_expired,
 | 
			
		||||
| 
						 | 
				
			
			@ -58,21 +60,39 @@ def old_perm_relation_user_to_application_permission_json(old_perm_relation_user
 | 
			
		|||
    return data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CATEGORY_DB = 'db'
 | 
			
		||||
CATEGORY_REMOTE = 'remote_app'
 | 
			
		||||
CATEGORY_CLOUD = 'cloud'
 | 
			
		||||
 | 
			
		||||
TYPE_DB_MYSQL = 'mysql'
 | 
			
		||||
TYPE_CLOUD_K8S = 'k8s'
 | 
			
		||||
TYPE_REMOTE_CHROME = 'chrome'
 | 
			
		||||
TYPE_REMOTE_MYSQL_WORKBENCH = 'mysql_workbench'
 | 
			
		||||
TYPE_REMOTE_VMWARE_CLIENT = 'vmware_client'
 | 
			
		||||
TYPE_REMOTE_CUSTOM = 'custom'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OLD_PERM_MODELS_NAME_MAP_DATA_JSON = {
 | 
			
		||||
    'DatabaseAppPermission': {
 | 
			
		||||
        'app_m2m_fields': 'database_apps',
 | 
			
		||||
        'relation_app_perm_id': 'databaseapppermission_id',
 | 
			
		||||
        'relation_app_id': 'databaseapp_id'
 | 
			
		||||
        'relation_app_id': 'databaseapp_id',
 | 
			
		||||
        'category': CATEGORY_DB,
 | 
			
		||||
        'type': TYPE_DB_MYSQL,
 | 
			
		||||
    },
 | 
			
		||||
    'RemoteAppPermission': {
 | 
			
		||||
        'app_m2m_fields': 'remote_apps',
 | 
			
		||||
        'relation_app_perm_id': 'remoteapppermission_id',
 | 
			
		||||
        'relation_app_id': 'remoteapp_id'
 | 
			
		||||
        'relation_app_id': 'remoteapp_id',
 | 
			
		||||
        'category': CATEGORY_REMOTE,
 | 
			
		||||
        'type': None,
 | 
			
		||||
    },
 | 
			
		||||
    'K8sAppPermission': {
 | 
			
		||||
        'app_m2m_fields': 'k8s_apps',
 | 
			
		||||
        'relation_app_perm_id': 'k8sapppermission_id',
 | 
			
		||||
        'relation_app_id': 'k8sapp_id'
 | 
			
		||||
        'relation_app_id': 'k8sapp_id',
 | 
			
		||||
        'category': CATEGORY_CLOUD,
 | 
			
		||||
        'type': TYPE_CLOUD_K8S,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -99,10 +119,17 @@ def migrate_and_integrate_application_permissions(apps, schema_editor):
 | 
			
		|||
        old_perms_relation_users = old_perm_model.users.through.objects.using(db_alias).all()
 | 
			
		||||
 | 
			
		||||
        # json
 | 
			
		||||
        perms_json = [
 | 
			
		||||
            old_perm_to_application_permission_json(old_perm)
 | 
			
		||||
            for old_perm in old_perms
 | 
			
		||||
        ]
 | 
			
		||||
        perms_json = []
 | 
			
		||||
        category = data_json['category']
 | 
			
		||||
        for old_perm in old_perms:
 | 
			
		||||
            if category == CATEGORY_REMOTE:
 | 
			
		||||
                type_list = list(old_perm.remote_apps.values_list('type', flat=True))
 | 
			
		||||
                _type = max(type_list, key=type_list.count)
 | 
			
		||||
            else:
 | 
			
		||||
                _type = data_json['type']
 | 
			
		||||
            perm_json = old_perm_to_application_permission_json(old_perm, category, _type)
 | 
			
		||||
            perms_json.append(perm_json)
 | 
			
		||||
 | 
			
		||||
        perms_relation_apps_json = [
 | 
			
		||||
            old_perm_relation_app_to_application_permission_json(old_perm_relation_app, data_json)
 | 
			
		||||
            for old_perm_relation_app in old_perms_relation_apps
 | 
			
		||||
| 
						 | 
				
			
			@ -166,13 +193,14 @@ def migrate_and_integrate_application_permissions(apps, schema_editor):
 | 
			
		|||
    new_app_perm_relation_user_model.objects.using(db_alias).bulk_create(new_app_perm_relation_user_objects)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('users', '0030_auto_20200819_2041'),
 | 
			
		||||
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
 | 
			
		||||
        ('assets', '0059_auto_20201027_1905'),
 | 
			
		||||
        ('applications', '0006_application'),
 | 
			
		||||
        ('assets', '0057_fill_node_value_assets_amount_and_parent_key'),
 | 
			
		||||
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
 | 
			
		||||
        ('perms', '0015_auto_20200929_1728'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,6 +217,8 @@ class Migration(migrations.Migration):
 | 
			
		|||
                ('created_by', models.CharField(blank=True, max_length=128, verbose_name='Created by')),
 | 
			
		||||
                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
 | 
			
		||||
                ('comment', models.TextField(blank=True, verbose_name='Comment')),
 | 
			
		||||
                ('category', models.CharField(choices=[('db', 'Database'), ('remote_app', 'Remote app'), ('cloud', 'Cloud')], max_length=16, verbose_name='Category')),
 | 
			
		||||
                ('type', models.CharField(choices=[('mysql', 'MySQL'), ('oracle', 'Oracle'), ('postgresql', 'PostgreSQL'), ('mariadb', 'MariaDB'), ('chrome', 'Chrome'), ('mysql_workbench', 'MySQL Workbench'), ('vmware_client', 'vSphere Client'), ('custom', 'Custom'), ('k8s', 'Kubernetes')], max_length=16, verbose_name='Type')),
 | 
			
		||||
                ('applications', models.ManyToManyField(blank=True, related_name='granted_by_permissions', to='applications.Application', verbose_name='Application')),
 | 
			
		||||
                ('system_users', models.ManyToManyField(related_name='granted_by_application_permissions', to='assets.SystemUser', verbose_name='System user')),
 | 
			
		||||
                ('user_groups', models.ManyToManyField(blank=True, related_name='applicationpermissions', to='users.UserGroup', verbose_name='User group')),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ from django.utils.translation import ugettext_lazy as _
 | 
			
		|||
from common.utils import lazyproperty
 | 
			
		||||
from .base import BasePermission
 | 
			
		||||
from users.models import User
 | 
			
		||||
from applications.models import Category
 | 
			
		||||
 | 
			
		||||
__all__ = [
 | 
			
		||||
    'ApplicationPermission',
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +16,8 @@ __all__ = [
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class ApplicationPermission(BasePermission):
 | 
			
		||||
    category = models.CharField(max_length=16, choices=Category.choices, verbose_name=_('Category'))
 | 
			
		||||
    type = models.CharField(max_length=16, choices=Category.get_all_type_choices(), verbose_name=_('Type'))
 | 
			
		||||
    applications = models.ManyToManyField('applications.Application', related_name='granted_by_permissions', blank=True, verbose_name=_("Application"))
 | 
			
		||||
    system_users = models.ManyToManyField('assets.SystemUser', related_name='granted_by_application_permissions', verbose_name=_("System user"))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue