diff --git a/apps/assets/api/asset/common.py b/apps/assets/api/asset/common.py index fb949f7ef..9b7b39a25 100644 --- a/apps/assets/api/asset/common.py +++ b/apps/assets/api/asset/common.py @@ -12,7 +12,6 @@ from assets.models import Asset, Node, Gateway from assets import serializers from assets.tasks import ( update_assets_hardware_info_manual, test_assets_connectivity_manual, - test_system_users_connectivity_a_asset, push_system_users_a_asset ) from assets.filters import FilterAssetByNodeFilterBackend, LabelFilterBackend, IpInFilterBackend diff --git a/apps/assets/migrations/0090_add_host.py b/apps/assets/migrations/0090_add_host.py deleted file mode 100644 index 4ffeb6553..000000000 --- a/apps/assets/migrations/0090_add_host.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.1.14 on 2022-03-30 10:35 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0089_auto_20220310_0616'), - ] - - operations = [ - migrations.CreateModel( - name='Host', - fields=[ - ('asset_ptr', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='assets.asset')), - ], - ), - ] diff --git a/apps/assets/migrations/0091_auto_20220401_1558.py b/apps/assets/migrations/0091_auto_20220401_1558.py deleted file mode 100644 index e3275d4d3..000000000 --- a/apps/assets/migrations/0091_auto_20220401_1558.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 3.1.14 on 2022-04-01 07:58 - -from django.db import migrations, models -import django.db.models.deletion - - -def migrate_to_host(apps, schema_editor): - asset_model = apps.get_model("assets", "Asset") - host_model = apps.get_model("assets", 'Host') - db_alias = schema_editor.connection.alias - - created = 0 - batch_size = 1000 - - while True: - start = created - end = created + batch_size - assets = asset_model.objects.using(db_alias).all()[start:end] - if not assets: - break - - hosts = [host_model(asset_ptr=asset) for asset in assets] - host_model.objects.using(db_alias).bulk_create(hosts, ignore_conflicts=True) - created += len(hosts) - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0090_add_host'), - ] - - operations = [ - migrations.AlterField( - model_name='host', - name='asset_ptr', - field=models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset'), - ), - migrations.RunPython(migrate_to_host) - ] diff --git a/apps/assets/migrations/0092_hardware.py b/apps/assets/migrations/0092_add_host.py similarity index 86% rename from apps/assets/migrations/0092_hardware.py rename to apps/assets/migrations/0092_add_host.py index a5e860a6d..9e2936e3f 100644 --- a/apps/assets/migrations/0092_hardware.py +++ b/apps/assets/migrations/0092_add_host.py @@ -1,17 +1,23 @@ -# Generated by Django 3.1.14 on 2022-04-02 09:09 +# Generated by Django 3.1.14 on 2022-03-30 10:35 +import uuid from django.db import migrations, models import django.db.models.deletion -import uuid class Migration(migrations.Migration): dependencies = [ - ('assets', '0091_auto_20220401_1558'), + ('assets', '0091_auto_20220629_1826'), ] operations = [ + migrations.CreateModel( + name='Host', + fields=[ + ('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), + ], + ), migrations.CreateModel( name='DeviceInfo', fields=[ diff --git a/apps/assets/migrations/0093_auto_20220403_1627.py b/apps/assets/migrations/0093_auto_20220403_1627.py index 27e5f11ee..64e79ccda 100644 --- a/apps/assets/migrations/0093_auto_20220403_1627.py +++ b/apps/assets/migrations/0093_auto_20220403_1627.py @@ -41,12 +41,33 @@ def migrate_hardware(apps, *args): created += len(hardware_infos) +def migrate_to_host(apps, schema_editor): + asset_model = apps.get_model("assets", "Asset") + host_model = apps.get_model("assets", 'Host') + db_alias = schema_editor.connection.alias + + created = 0 + batch_size = 1000 + + while True: + start = created + end = created + batch_size + assets = asset_model.objects.using(db_alias).all()[start:end] + if not assets: + break + + hosts = [host_model(asset_ptr=asset) for asset in assets] + host_model.objects.using(db_alias).bulk_create(hosts, ignore_conflicts=True) + created += len(hosts) + + class Migration(migrations.Migration): dependencies = [ - ('assets', '0092_hardware'), + ('assets', '0092_add_host'), ] operations = [ - migrations.RunPython(migrate_hardware) + migrations.RunPython(migrate_to_host), + migrations.RunPython(migrate_hardware), ] diff --git a/apps/assets/migrations/0094_alter_systemuser_assets.py.bak b/apps/assets/migrations/0094_alter_systemuser_assets.py.bak deleted file mode 100644 index c3f2f2cfc..000000000 --- a/apps/assets/migrations/0094_alter_systemuser_assets.py.bak +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 09:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0093_auto_20220711_1413'), - ] - - operations = [ - migrations.RemoveField( - model_name='systemuser', - name='assets', - ), - migrations.AddField( - model_name='systemuser', - name='assets', - field=models.ManyToManyField(blank=True, related_name='system_users', to='assets.Asset', verbose_name='Assets'), - ), - ] diff --git a/apps/assets/migrations/0094_auto_20220803_1448.py b/apps/assets/migrations/0094_auto_20220803_1448.py deleted file mode 100644 index eafb9caca..000000000 --- a/apps/assets/migrations/0094_auto_20220803_1448.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.2.14 on 2022-08-03 06:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0093_auto_20220711_1413'), - ] - - operations = [ - migrations.DeleteModel( - name='Cluster', - ), - ] diff --git a/apps/assets/migrations/0095_auto_20220713_1746.py.bak b/apps/assets/migrations/0095_auto_20220713_1746.py.bak deleted file mode 100644 index b803dae51..000000000 --- a/apps/assets/migrations/0095_auto_20220713_1746.py.bak +++ /dev/null @@ -1,45 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-13 09:46 - -import time -from django.db import migrations - - -def migrate_asset_system_user_relations(apps, schema_editor): - system_user_model = apps.get_model('assets', 'SystemUser') - old_model = apps.get_model('assets', 'AuthBook') - new_model = system_user_model.assets.through - - count = 0 - bulk_size = 1000 - print("\nStart migrate asset system user relations") - while True: - start = time.time() - auth_books = old_model.objects.only('asset_id', 'systemuser_id')[count:count+bulk_size] - auth_books = list(auth_books) - count += len(auth_books) - if not auth_books: - break - asset_system_users = [] - for auth_book in auth_books: - if not auth_book.asset_id or not auth_book.systemuser_id: - continue - asset_system_user = new_model( - asset_id=auth_book.asset_id, - systemuser_id=auth_book.systemuser_id - ) - asset_system_users.append(asset_system_user) - new_model.objects.bulk_create(asset_system_users, ignore_conflicts=True) - print("Create asset system user relations: {}-{} using: {:.2f}s".format( - count - bulk_size, count, time.time()-start - )) - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0094_alter_systemuser_assets'), - ] - - operations = [ - migrations.RunPython(migrate_asset_system_user_relations) - ] diff --git a/apps/assets/migrations/0096_auto_20220714_1627.py.bak b/apps/assets/migrations/0096_auto_20220714_1627.py.bak deleted file mode 100644 index 274b2d8ef..000000000 --- a/apps/assets/migrations/0096_auto_20220714_1627.py.bak +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.12 on 2022-07-14 08:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0095_auto_20220713_1746'), - ] - - operations = [ - migrations.RenameField( - model_name='systemuser', - old_name='auto_push', - new_name='auto_push_account', - ), - migrations.AddField( - model_name='systemuser', - name='account_template_enabled', - field=models.BooleanField(default=False, verbose_name='Auto account if not exist'), - ), - ] diff --git a/apps/assets/migrations/0092_auto_20220711_1409.py b/apps/assets/migrations/0101_auto_20220711_1409.py similarity index 99% rename from apps/assets/migrations/0092_auto_20220711_1409.py rename to apps/assets/migrations/0101_auto_20220711_1409.py index 6515392a0..ff3b1a1c6 100644 --- a/apps/assets/migrations/0092_auto_20220711_1409.py +++ b/apps/assets/migrations/0101_auto_20220711_1409.py @@ -13,7 +13,7 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('assets', '0091_auto_20220629_1826'), + ('assets', '0100_auto_20220430_2126'), ] operations = [ diff --git a/apps/assets/migrations/0093_auto_20220711_1413.py b/apps/assets/migrations/0102_auto_20220711_1413.py similarity index 97% rename from apps/assets/migrations/0093_auto_20220711_1413.py rename to apps/assets/migrations/0102_auto_20220711_1413.py index ba7d7e0c0..bc74f336c 100644 --- a/apps/assets/migrations/0093_auto_20220711_1413.py +++ b/apps/assets/migrations/0102_auto_20220711_1413.py @@ -57,7 +57,7 @@ def migrate_accounts(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('assets', '0092_auto_20220711_1409'), + ('assets', '0101_auto_20220711_1409'), ] operations = [ diff --git a/apps/assets/migrations/0103_auto_20220803_1448.py b/apps/assets/migrations/0103_auto_20220803_1448.py new file mode 100644 index 000000000..7af3514e2 --- /dev/null +++ b/apps/assets/migrations/0103_auto_20220803_1448.py @@ -0,0 +1,51 @@ +# Generated by Django 3.2.14 on 2022-08-03 10:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0102_auto_20220711_1413'), + ] + + operations = [ + migrations.CreateModel( + name='Protocol', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=32, verbose_name='Name')), + ('port', models.IntegerField(verbose_name='Port')), + ], + ), + migrations.RemoveField( + model_name='asset', + name='port', + ), + migrations.RemoveField( + model_name='asset', + name='protocol', + ), + migrations.AddField( + model_name='asset', + name='_protocols', + field=models.CharField(blank=True, default='ssh/22', max_length=128, verbose_name='Protocols'), + ), + migrations.RemoveField( + model_name='asset', + name='protocols', + ), + migrations.AlterField( + model_name='systemuser', + name='protocol', + field=models.CharField(default='ssh', max_length=16, verbose_name='Protocol'), + ), + migrations.AddField( + model_name='asset', + name='protocols', + field=models.ManyToManyField(blank=True, to='assets.Protocol', verbose_name='Protocols'), + ), + migrations.DeleteModel( + name='Cluster', + ), + ] diff --git a/apps/assets/migrations/0104_auto_20220803_1859.py b/apps/assets/migrations/0104_auto_20220803_1859.py new file mode 100644 index 000000000..ecd75743b --- /dev/null +++ b/apps/assets/migrations/0104_auto_20220803_1859.py @@ -0,0 +1,42 @@ +# Generated by Django 3.2.14 on 2022-08-03 10:59 +import time +from django.db import migrations + + +def migrate_asset_protocols(apps, schema_editor): + asset_model = apps.get_model('assets', 'Asset') + protocol_model = apps.get_model('assets', 'Protocol') + + count = 0 + bulk_size = 1000 + print("\nStart migrate asset protocols") + while True: + start = time.time() + assets = asset_model.objects.all()[count:count+bulk_size] + count += len(assets) + if not assets: + break + + protocols = [] + for asset in assets: + for protocol in asset.protocols.all(): + protocols.append(protocol_model( + asset_id=asset.id, + protocol=protocol.protocol, + port=protocol.port, + )) + protocol_model.objects.bulk_create(protocols, ignore_conflicts=True) + print("Create asset protocols: {}-{} using: {:.2f}s".format( + count - bulk_size, count, time.time()-start + )) + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0103_auto_20220803_1448'), + ] + + operations = [ + migrations.RunPython(migrate_asset_protocols) + ] diff --git a/apps/assets/models/_user.py b/apps/assets/models/_user.py index 6baffa3d0..94e38b1e4 100644 --- a/apps/assets/models/_user.py +++ b/apps/assets/models/_user.py @@ -41,7 +41,7 @@ class SystemUser(ProtocolMixin, BaseUser): groups = models.ManyToManyField('users.UserGroup', blank=True, verbose_name=_("User groups")) type = models.CharField(max_length=16, choices=Type.choices, default=Type.common, verbose_name=_('Type')) priority = models.IntegerField(default=81, verbose_name=_("Priority"), help_text=_("1-100, the lower the value will be match first"), validators=[MinValueValidator(1), MaxValueValidator(100)]) - protocol = models.CharField(max_length=16, choices=ProtocolMixin.Protocol.choices, default='ssh', verbose_name=_('Protocol')) + protocol = models.CharField(max_length=16, default='ssh', verbose_name=_('Protocol')) auto_push = models.BooleanField(default=True, verbose_name=_('Auto push')) sudo = models.TextField(default='/bin/whoami', verbose_name=_('Sudo')) shell = models.CharField(max_length=64, default='/bin/bash', verbose_name=_('Shell')) diff --git a/apps/assets/models/asset/common.py b/apps/assets/models/asset/common.py index 56348f4b2..e24c7e80d 100644 --- a/apps/assets/models/asset/common.py +++ b/apps/assets/models/asset/common.py @@ -5,19 +5,17 @@ import uuid import logging from functools import reduce -from collections import OrderedDict from django.db import models from django.utils.translation import ugettext_lazy as _ -from common.db.fields import JsonDictTextField from common.utils import lazyproperty from orgs.mixins.models import OrgModelMixin, OrgManager from assets.const import Category, AllTypes from ..platform import Platform from ..base import AbsConnectivity -__all__ = ['Asset', 'ProtocolsMixin', 'AssetQuerySet', 'default_node', 'default_cluster'] +__all__ = ['Asset', 'AssetQuerySet', 'default_node'] logger = logging.getLogger(__name__) @@ -45,49 +43,6 @@ class AssetQuerySet(models.QuerySet): return self.filter(protocols__contains=name) -class ProtocolsMixin: - protocols = '' - - class Protocol(models.TextChoices): - ssh = 'ssh', 'SSH' - rdp = 'rdp', 'RDP' - telnet = 'telnet', 'Telnet' - vnc = 'vnc', 'VNC' - - @property - def protocols_as_list(self): - if not self.protocols: - return [] - return self.protocols.split(' ') - - @property - def protocols_as_dict(self): - d = OrderedDict() - protocols = self.protocols_as_list - for i in protocols: - if '/' not in i: - continue - name, port = i.split('/')[:2] - if not all([name, port]): - continue - d[name] = int(port) - return d - - @property - def protocols_as_json(self): - return [ - {"name": name, "port": port} - for name, port in self.protocols_as_dict.items() - ] - - def has_protocol(self, name): - return name in self.protocols_as_dict - - @property - def ssh_port(self): - return self.protocols_as_dict.get("ssh", 22) - - class NodesRelationMixin: NODES_CACHE_KEY = 'ASSET_NODES_{}' ALL_ASSET_NODES_CACHE_KEY = 'ALL_ASSETS_NODES' @@ -112,17 +67,15 @@ class NodesRelationMixin: return nodes -class Asset(AbsConnectivity, ProtocolsMixin, NodesRelationMixin, OrgModelMixin): +class Asset(AbsConnectivity, NodesRelationMixin, OrgModelMixin): Category = Category id = models.UUIDField(default=uuid.uuid4, primary_key=True) hostname = models.CharField(max_length=128, verbose_name=_('Hostname')) ip = models.CharField(max_length=128, verbose_name=_('IP'), db_index=True) category = models.CharField(max_length=16, choices=Category.choices, verbose_name=_("Category")) type = models.CharField(max_length=128, choices=AllTypes.choices, verbose_name=_("Type")) - protocol = models.CharField(max_length=128, default=ProtocolsMixin.Protocol.ssh, - choices=ProtocolsMixin.Protocol.choices, verbose_name=_('Protocol')) - port = models.IntegerField(default=22, verbose_name=_('Port')) - protocols = models.CharField(max_length=128, default='ssh/22', blank=True, verbose_name=_("Protocols")) + _protocols = models.CharField(max_length=128, default='ssh/22', blank=True, verbose_name=_("Protocols")) + protocols = models.ManyToManyField('Protocol', verbose_name=_("Protocols"), blank=True) platform = models.ForeignKey(Platform, default=Platform.default, on_delete=models.PROTECT, verbose_name=_("Platform"), related_name='assets') domain = models.ForeignKey("assets.Domain", null=True, blank=True, related_name='assets', @@ -134,7 +87,6 @@ class Asset(AbsConnectivity, ProtocolsMixin, NodesRelationMixin, OrgModelMixin): # Auth admin_user = models.ForeignKey('assets.SystemUser', on_delete=models.SET_NULL, null=True, verbose_name=_("Admin user"), related_name='admin_assets') - # Some information public_ip = models.CharField(max_length=128, blank=True, null=True, verbose_name=_('Public IP')) number = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Asset number')) @@ -178,55 +130,6 @@ class Asset(AbsConnectivity, ProtocolsMixin, NodesRelationMixin, OrgModelMixin): """ return self.admin_user.username - def is_windows(self): - return self.platform.is_windows() - - def is_unixlike(self): - return self.platform.is_unixlike() - - def is_support_ansible(self): - return self.has_protocol('ssh') and self.platform_base not in ("Other",) - - def get_auth_info(self, with_become=False): - if not self.admin_user: - return {} - - if self.is_unixlike() and self.admin_user.su_enabled and self.admin_user.su_from: - auth_user = self.admin_user.su_from - become_user = self.admin_user - else: - auth_user = self.admin_user - become_user = None - - auth_user.load_asset_special_auth(self) - info = { - 'username': auth_user.username, - 'password': auth_user.password, - 'private_key': auth_user.private_key_file - } - - if not with_become or self.is_windows(): - return info - - if become_user: - become_user.load_asset_special_auth(self) - become_method = 'su' - become_username = become_user.username - become_pass = become_user.password - else: - become_method = 'sudo' - become_username = 'root' - become_pass = auth_user.password - become_info = { - 'become': { - 'method': become_method, - 'username': become_username, - 'pass': become_pass - } - } - info.update(become_info) - return info - def nodes_display(self): names = [] for n in self.nodes.all(): @@ -270,7 +173,7 @@ class Asset(AbsConnectivity, ProtocolsMixin, NodesRelationMixin, OrgModelMixin): 'id': self.id, 'hostname': self.hostname, 'ip': self.ip, - 'protocols': self.protocols_as_list, + 'protocols': self.protocols, 'platform': self.platform_base, } } diff --git a/apps/assets/models/protocol.py b/apps/assets/models/protocol.py index b6bf4cf6a..22d330339 100644 --- a/apps/assets/models/protocol.py +++ b/apps/assets/models/protocol.py @@ -1,10 +1,8 @@ from django.db import models from django.utils.translation import gettext_lazy as _ -from common.db.models import JMSBaseModel - -class Protocol(JMSBaseModel): +class Protocol(models.Model): name = models.CharField(max_length=32, verbose_name=_("Name")) port = models.IntegerField(verbose_name=_("Port")) diff --git a/apps/assets/serializers/__init__.py b/apps/assets/serializers/__init__.py index f29c81d21..ded671746 100644 --- a/apps/assets/serializers/__init__.py +++ b/apps/assets/serializers/__init__.py @@ -3,7 +3,6 @@ from .asset import * from .label import * -from .system_user import * from .node import * from .domain import * from .gathered_user import * diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py deleted file mode 100644 index f4ca404f3..000000000 --- a/apps/assets/serializers/system_user.py +++ /dev/null @@ -1,128 +0,0 @@ -from rest_framework import serializers -from django.utils.translation import ugettext_lazy as _ - -from common.validators import alphanumeric_re, alphanumeric_cn_re, alphanumeric_win_re -from orgs.mixins.serializers import BulkOrgResourceModelSerializer - -__all__ = [ - 'SystemUserSerializer', 'MiniSystemUserSerializer', - 'SystemUserSimpleSerializer', -] - - -class SystemUserSerializer(BulkOrgResourceModelSerializer): - """ - 系统用户 - """ - - class Meta: - model = SystemUser - fields_mini = ['id', 'name', 'username', 'protocol'] - fields_small = fields_mini + [ - 'login_mode', 'su_enabled', 'su_from', - 'date_created', 'date_updated', 'comment', - 'created_by', - ] - fields = fields_small - extra_kwargs = { - 'cmd_filters': {"required": False, 'label': _('Command filter')}, - 'login_mode_display': {'label': _('Login mode display')}, - 'created_by': {'read_only': True}, - 'ad_domain': {'required': False, 'allow_blank': True, 'label': _('Ad domain')}, - 'su_from': {'help_text': _('Only ssh and automatic login system users are supported')} - } - - def validate_username_same_with_user(self, username_same_with_user): - if not username_same_with_user: - return username_same_with_user - protocol = self.get_initial_value("protocol", "ssh") - queryset = SystemUser.objects.filter( - protocol=protocol, - username_same_with_user=True - ) - if self.instance: - queryset = queryset.exclude(id=self.instance.id) - exists = queryset.exists() - if not exists: - return username_same_with_user - error = _("Username same with user with protocol {} only allow 1").format(protocol) - raise serializers.ValidationError(error) - - def validate_username(self, username): - protocol = self.get_initial_value("protocol") - if username: - if protocol == Protocol.telnet: - regx = alphanumeric_cn_re - elif protocol == Protocol.rdp: - regx = alphanumeric_win_re - else: - regx = alphanumeric_re - if not regx.match(username): - raise serializers.ValidationError(_('Special char not allowed')) - return username - - username_same_with_user = self.get_initial_value("username_same_with_user") - if username_same_with_user: - return '' - - login_mode = self.get_initial_value("login_mode") - if login_mode == SystemUser.LOGIN_AUTO and protocol != Protocol.vnc \ - and protocol != Protocol.redis: - msg = _('* Automatic login mode must fill in the username.') - raise serializers.ValidationError(msg) - return username - - @staticmethod - def validate_sftp_root(value): - if value in ['home', 'tmp']: - return value - if not value.startswith('/'): - error = _("Path should starts with /") - raise serializers.ValidationError(error) - return value - - def validate_su_from(self, su_from: SystemUser): - # self: su enabled - su_enabled = self.get_initial_value('su_enabled', default=False) - if not su_enabled: - return - if not su_from: - error = _('This field is required.') - raise serializers.ValidationError(error) - # self: protocol ssh - protocol = self.get_initial_value('protocol', default=Protocol.ssh.value) - if protocol not in [Protocol.ssh.value]: - error = _('Only ssh protocol system users are allowed') - raise serializers.ValidationError(error) - # su_from: protocol same - if su_from.protocol != protocol: - error = _('The protocol must be consistent with the current user: {}').format(protocol) - raise serializers.ValidationError(error) - # su_from: login model auto - if su_from.login_mode != su_from.LOGIN_AUTO: - error = _('Only system users with automatic login are allowed') - raise serializers.ValidationError(error) - return su_from - - -class MiniSystemUserSerializer(serializers.ModelSerializer): - class Meta: - model = SystemUser - fields = SystemUserSerializer.Meta.fields_mini - - -class SystemUserSimpleSerializer(serializers.ModelSerializer): - """ - 系统用户最基本信息的数据结构 - """ - - class Meta: - model = SystemUser - fields = ('id', 'name', 'username') - - -class SystemUserTempAuthSerializer(SystemUserSerializer): - instance_id = serializers.CharField() - - class Meta(SystemUserSerializer.Meta): - fields = ['instance_id', 'username', 'password'] diff --git a/apps/rbac/api/role.py b/apps/rbac/api/role.py index 44cb899db..be8274e91 100644 --- a/apps/rbac/api/role.py +++ b/apps/rbac/api/role.py @@ -4,11 +4,11 @@ from rest_framework.exceptions import PermissionDenied from rest_framework.decorators import action from common.drf.api import JMSModelViewSet +from common.mixins.api import PaginatedResponseMixin from ..filters import RoleFilter from ..serializers import RoleSerializer, RoleUserSerializer from ..models import Role, SystemRole, OrgRole from .permission import PermissionViewSet -from common.mixins.api import PaginatedResponseMixin __all__ = [ 'RoleViewSet', 'SystemRoleViewSet', 'OrgRoleViewSet', @@ -16,7 +16,7 @@ __all__ = [ ] -class RoleViewSet(PaginatedResponseMixin, JMSModelViewSet): +class RoleViewSet(JMSModelViewSet): queryset = Role.objects.all() serializer_classes = { 'default': RoleSerializer, diff --git a/apps/terminal/migrations/0048_auto_20220407_1726.py b/apps/terminal/migrations/0052_auto_20220707_1726.py similarity index 92% rename from apps/terminal/migrations/0048_auto_20220407_1726.py rename to apps/terminal/migrations/0052_auto_20220707_1726.py index 1eb432efc..22eab3a1a 100644 --- a/apps/terminal/migrations/0048_auto_20220407_1726.py +++ b/apps/terminal/migrations/0052_auto_20220707_1726.py @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('terminal', '0047_auto_20220302_1951'), + ('terminal', '0051_sessionsharing_users'), ] operations = [