From 5d80933e7bdb340444d7cd8437e641d6cefb6381 Mon Sep 17 00:00:00 2001 From: jiangweidong <80373698+F2C-Jiang@users.noreply.github.com> Date: Thu, 30 Jun 2022 11:21:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=9A=E8=AF=9D=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E5=8F=AF=E8=AE=BE=E7=BD=AE1=E3=80=815=E5=88=86=E9=92=9F?= =?UTF-8?q?=E6=97=B6=E9=99=90=EF=BC=8C=E4=B8=94=E5=8F=AF=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E7=BB=99=E6=8C=87=E5=AE=9A=E4=BA=BA=20(#8227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * feat: 完成会话分享可设置1、5分钟时限,且可分享给指定人 --- .../migrations/0050_sessionsharing_users.py | 18 ++++++++++++++++++ apps/terminal/models/sharing.py | 7 +++++-- apps/terminal/serializers/sharing.py | 11 ++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 apps/terminal/migrations/0050_sessionsharing_users.py diff --git a/apps/terminal/migrations/0050_sessionsharing_users.py b/apps/terminal/migrations/0050_sessionsharing_users.py new file mode 100644 index 000000000..9a014a62f --- /dev/null +++ b/apps/terminal/migrations/0050_sessionsharing_users.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.14 on 2022-05-17 00:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0049_endpoint_redis_port'), + ] + + operations = [ + migrations.AddField( + model_name='sessionsharing', + name='users', + field=models.CharField(default=list, max_length=1024, verbose_name='User'), + ), + ] diff --git a/apps/terminal/models/sharing.py b/apps/terminal/models/sharing.py index 45d62fb92..1968b3f08 100644 --- a/apps/terminal/models/sharing.py +++ b/apps/terminal/models/sharing.py @@ -28,6 +28,7 @@ class SessionSharing(CommonModelMixin, OrgModelMixin): expired_time = models.IntegerField( default=0, verbose_name=_('Expired time (min)'), db_index=True ) + users = models.CharField(max_length=1024, verbose_name=_("User"), default=list) class Meta: ordering = ('-date_created', ) @@ -49,11 +50,13 @@ class SessionSharing(CommonModelMixin, OrgModelMixin): return False return True - def can_join(self): + def can_join(self, joiner): if not self.is_active: return False, _('Link not active') if not self.is_expired: return False, _('Link expired') + if self.users and str(joiner.id) not in self.users.split(','): + return False, _('User not allowed to join') return True, '' @@ -110,7 +113,7 @@ class SessionJoinRecord(CommonModelMixin, OrgModelMixin): def can_join(self): # sharing - sharing_can_join, reason = self.sharing.can_join() + sharing_can_join, reason = self.sharing.can_join(self.joiner) if not sharing_can_join: return False, reason # self diff --git a/apps/terminal/serializers/sharing.py b/apps/terminal/serializers/sharing.py index 5e8568cf5..845c35029 100644 --- a/apps/terminal/serializers/sharing.py +++ b/apps/terminal/serializers/sharing.py @@ -8,17 +8,26 @@ __all__ = ['SessionSharingSerializer', 'SessionJoinRecordSerializer'] class SessionSharingSerializer(OrgResourceModelSerializerMixin): + users = serializers.ListSerializer( + child=serializers.CharField(max_length=36), write_only=True, default=list, allow_null=True + ) + class Meta: model = SessionSharing fields_mini = ['id'] fields_small = fields_mini + [ 'verify_code', 'is_active', 'expired_time', 'created_by', - 'date_created', 'date_updated' + 'date_created', 'date_updated', 'users' ] fields_fk = ['session', 'creator'] fields = fields_small + fields_fk read_only_fields = ['verify_code'] + def save(self, **kwargs): + users = self.validated_data.get('users', []) + self.validated_data['users'] = ','.join(users) + return super().save(**kwargs) + def create(self, validated_data): validated_data['verify_code'] = random_string(4) session = validated_data.get('session')