Merge branch 'v3' of github.com:jumpserver/jumpserver into v3

pull/9094/head
ibuler 2022-11-16 21:06:08 +08:00
commit e2001d7779
3 changed files with 23 additions and 10 deletions

View File

@ -4,7 +4,7 @@ import six
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from rest_framework.fields import ChoiceField from rest_framework.fields import ChoiceField, empty
from common.db.fields import BitChoices from common.db.fields import BitChoices
from common.utils import decrypt_password from common.utils import decrypt_password
@ -153,3 +153,17 @@ class BitChoicesField(TreeChoicesMixin, serializers.MultipleChoiceField):
raise serializers.ValidationError(_("Invalid choice: {}").format(name)) raise serializers.ValidationError(_("Invalid choice: {}").format(name))
value |= name_value_map[name] value |= name_value_map[name]
return value return value
def run_validation(self, data=empty):
"""
备注:
创建授权规则不包含 actions 字段时, 会使用默认值(AssetPermission 中设置),
会直接使用 ['connect', '...'] 等字段保存到数据库导致类型错误
这里将获取到的值再执行一下 to_internal_value 方法, 转化为内部值
"""
data = super().run_validation(data)
if isinstance(data, int):
return data
value = self.to_internal_value(data)
self.run_validators(value)
return value

View File

@ -1,5 +1,4 @@
def bit(x): def bit(x):
if x == 0: if x < 1:
return 0 raise ValueError("x must be greater than 1")
else:
return 2 ** (x - 1) return 2 ** (x - 1)

View File

@ -10,11 +10,11 @@ __all__ = ["ActionChoices"]
class ActionChoices(BitChoices): class ActionChoices(BitChoices):
connect = bit(0), _("Connect") connect = bit(1), _("Connect")
upload = bit(1), _("Upload") upload = bit(2), _("Upload")
download = bit(2), _("Download") download = bit(3), _("Download")
copy = bit(3), _("Copy") copy = bit(4), _("Copy")
paste = bit(4), _("Paste") paste = bit(5), _("Paste")
@classmethod @classmethod
def is_tree(cls): def is_tree(cls):