mirror of https://github.com/jumpserver/jumpserver
feat: 会话分享可设置1、5分钟时限,且可分享给指定人 (#8227)
* perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * perf: 完成会话分享可设置1、5分钟时限,且可分享给指定人 * feat: 完成会话分享可设置1、5分钟时限,且可分享给指定人pull/8514/head
parent
067a90ff9a
commit
5d80933e7b
|
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -28,6 +28,7 @@ class SessionSharing(CommonModelMixin, OrgModelMixin):
|
||||||
expired_time = models.IntegerField(
|
expired_time = models.IntegerField(
|
||||||
default=0, verbose_name=_('Expired time (min)'), db_index=True
|
default=0, verbose_name=_('Expired time (min)'), db_index=True
|
||||||
)
|
)
|
||||||
|
users = models.CharField(max_length=1024, verbose_name=_("User"), default=list)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('-date_created', )
|
ordering = ('-date_created', )
|
||||||
|
@ -49,11 +50,13 @@ class SessionSharing(CommonModelMixin, OrgModelMixin):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def can_join(self):
|
def can_join(self, joiner):
|
||||||
if not self.is_active:
|
if not self.is_active:
|
||||||
return False, _('Link not active')
|
return False, _('Link not active')
|
||||||
if not self.is_expired:
|
if not self.is_expired:
|
||||||
return False, _('Link 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, ''
|
return True, ''
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +113,7 @@ class SessionJoinRecord(CommonModelMixin, OrgModelMixin):
|
||||||
|
|
||||||
def can_join(self):
|
def can_join(self):
|
||||||
# sharing
|
# sharing
|
||||||
sharing_can_join, reason = self.sharing.can_join()
|
sharing_can_join, reason = self.sharing.can_join(self.joiner)
|
||||||
if not sharing_can_join:
|
if not sharing_can_join:
|
||||||
return False, reason
|
return False, reason
|
||||||
# self
|
# self
|
||||||
|
|
|
@ -8,17 +8,26 @@ __all__ = ['SessionSharingSerializer', 'SessionJoinRecordSerializer']
|
||||||
|
|
||||||
|
|
||||||
class SessionSharingSerializer(OrgResourceModelSerializerMixin):
|
class SessionSharingSerializer(OrgResourceModelSerializerMixin):
|
||||||
|
users = serializers.ListSerializer(
|
||||||
|
child=serializers.CharField(max_length=36), write_only=True, default=list, allow_null=True
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SessionSharing
|
model = SessionSharing
|
||||||
fields_mini = ['id']
|
fields_mini = ['id']
|
||||||
fields_small = fields_mini + [
|
fields_small = fields_mini + [
|
||||||
'verify_code', 'is_active', 'expired_time', 'created_by',
|
'verify_code', 'is_active', 'expired_time', 'created_by',
|
||||||
'date_created', 'date_updated'
|
'date_created', 'date_updated', 'users'
|
||||||
]
|
]
|
||||||
fields_fk = ['session', 'creator']
|
fields_fk = ['session', 'creator']
|
||||||
fields = fields_small + fields_fk
|
fields = fields_small + fields_fk
|
||||||
read_only_fields = ['verify_code']
|
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):
|
def create(self, validated_data):
|
||||||
validated_data['verify_code'] = random_string(4)
|
validated_data['verify_code'] = random_string(4)
|
||||||
session = validated_data.get('session')
|
session = validated_data.get('session')
|
||||||
|
|
Loading…
Reference in New Issue