From e8f68eb6c190b25551c79a9f00525d4055dc4e98 Mon Sep 17 00:00:00 2001 From: BaiJiangJie <32935519+BaiJiangJie@users.noreply.github.com> Date: Sat, 6 Jul 2019 14:02:56 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[Update]=20=E8=A7=A3=E5=86=B3=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E8=A7=84=E5=88=99actions=E5=AD=97=E6=AE=B5=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E5=88=97=E8=A1=A8=E6=88=96=E5=8F=AA=E5=A1=AB=E4=B8=80?= =?UTF-8?q?=E4=B8=AAaction=E7=9A=84=E9=97=AE=E9=A2=98=20(#2888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Update] 解决授权规则actions字段为空列表或只填一个action的问题 * [Update] Action NO改为NULL * [Update] Action NULL改为NONE --- apps/perms/models/asset_permission.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/perms/models/asset_permission.py b/apps/perms/models/asset_permission.py index 296e0e5d4..53bceb392 100644 --- a/apps/perms/models/asset_permission.py +++ b/apps/perms/models/asset_permission.py @@ -16,6 +16,7 @@ __all__ = [ class Action: + NONE = 0 CONNECT = 0b00000001 UPLOAD = 0b00000010 DOWNLOAD = 0b00000100 @@ -51,12 +52,15 @@ class Action: @classmethod def choices_to_value(cls, value): - def to_choices(x, y): - x = cls.NAME_MAP_REVERSE.get(x, 0) - y = cls.NAME_MAP_REVERSE.get(y, 0) - return x | y if not value: - return None + return cls.NONE + if len(value) == 1: + return cls.NAME_MAP_REVERSE.get(value[0], cls.NONE) + + def to_choices(x, y): + x = cls.NAME_MAP_REVERSE.get(x, cls.NONE) + y = cls.NAME_MAP_REVERSE.get(y, cls.NONE) + return x | y return reduce(to_choices, value) @classmethod From 963b0911cf885349f1524a8c6efbb092583aa8a6 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 6 Jul 2019 14:06:12 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[Update]=20=E8=B5=84=E4=BA=A7model.=5F=5Fal?= =?UTF-8?q?l=5F=5F=E6=B7=BB=E5=8A=A0ProtocolsMixin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/models/asset.py b/apps/assets/models/asset.py index bbf543fcb..a37aa16b1 100644 --- a/apps/assets/models/asset.py +++ b/apps/assets/models/asset.py @@ -15,7 +15,7 @@ from .user import AdminUser, SystemUser from .utils import Connectivity from orgs.mixins import OrgModelMixin, OrgManager -__all__ = ['Asset'] +__all__ = ['Asset', 'ProtocolsMixin'] logger = logging.getLogger(__name__) From a8c95093c45d0024749970354287619950040441 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 6 Jul 2019 14:46:01 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[Update]=20=E4=BF=AE=E5=A4=8DAction?= =?UTF-8?q?=E8=BD=AC=E5=8C=96=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/models/asset_permission.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/perms/models/asset_permission.py b/apps/perms/models/asset_permission.py index 53bceb392..d5fafc63a 100644 --- a/apps/perms/models/asset_permission.py +++ b/apps/perms/models/asset_permission.py @@ -52,16 +52,20 @@ class Action: @classmethod def choices_to_value(cls, value): - if not value: + if not isinstance(value, list): + return cls.NONE + db_value = [ + cls.NAME_MAP_REVERSE[v] for v in value + if v in cls.NAME_MAP_REVERSE.keys() + ] + if not db_value: return cls.NONE - if len(value) == 1: - return cls.NAME_MAP_REVERSE.get(value[0], cls.NONE) def to_choices(x, y): - x = cls.NAME_MAP_REVERSE.get(x, cls.NONE) - y = cls.NAME_MAP_REVERSE.get(y, cls.NONE) return x | y - return reduce(to_choices, value) + + result = reduce(to_choices, db_value) + return result @classmethod def choices(cls):