From cfca5191589118c445931498caf23fbaa8a38210 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 19 Jul 2023 20:16:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E7=9A=84=E8=B4=A6=E5=8F=B7=EF=BC=8C=E7=94=A8=E6=88=B7=E5=90=8D?= =?UTF-8?q?=E7=9B=B8=E5=90=8C=E7=9A=84=EF=BC=8C=E5=8F=AA=E6=9C=89=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/utils/account.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/perms/utils/account.py b/apps/perms/utils/account.py index 62c7b68d0..caef9dc30 100644 --- a/apps/perms/utils/account.py +++ b/apps/perms/utils/account.py @@ -41,7 +41,10 @@ class PermAccountUtil(AssetPermissionUtil): alias_date_expired_mapper[alias].append(perm.date_expired) asset_accounts = asset.accounts.all().active() - username_account_mapper = {account.username: account for account in asset_accounts} + # username_accounts_mapper = {account.username: account for account in asset_accounts} + username_accounts_mapper = defaultdict(list) + for account in asset_accounts: + username_accounts_mapper[account.username].append(account) cleaned_accounts_action_bit = defaultdict(int) cleaned_accounts_expired = defaultdict(list) @@ -56,9 +59,10 @@ class PermAccountUtil(AssetPermissionUtil): ) for alias, action_bit in alias_action_bit_mapper.items(): + account = None if alias == AliasAccount.USER: - if user.username in username_account_mapper: - account = username_account_mapper[user.username] + if user.username in username_accounts_mapper: + account = username_accounts_mapper[user.username] else: account = Account.get_user_account() elif alias == AliasAccount.INPUT: @@ -67,12 +71,14 @@ class PermAccountUtil(AssetPermissionUtil): account = Account.get_anonymous_account() elif alias.startswith('@'): continue - elif alias in username_account_mapper: - account = username_account_mapper[alias] - else: - account = None + accounts = [] if account: + accounts.append(account) + if alias in username_accounts_mapper: + accounts += username_accounts_mapper[alias] + + for account in accounts: cleaned_accounts_action_bit[account] |= action_bit cleaned_accounts_expired[account].extend(alias_date_expired_mapper[alias]) From 14efd9afc1c2c7fdb38c1c8baeccdfcaf00e505c Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 19 Jul 2023 20:27:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?perf:=20=E4=BF=AE=E5=A4=8D=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AF=BC=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/utils/account.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/perms/utils/account.py b/apps/perms/utils/account.py index caef9dc30..d97343372 100644 --- a/apps/perms/utils/account.py +++ b/apps/perms/utils/account.py @@ -60,25 +60,25 @@ class PermAccountUtil(AssetPermissionUtil): for alias, action_bit in alias_action_bit_mapper.items(): account = None + _accounts = [] if alias == AliasAccount.USER: if user.username in username_accounts_mapper: - account = username_accounts_mapper[user.username] + _accounts = username_accounts_mapper[user.username] else: account = Account.get_user_account() elif alias == AliasAccount.INPUT: account = Account.get_manual_account() elif alias == AliasAccount.ANON: account = Account.get_anonymous_account() + elif alias in username_accounts_mapper: + _accounts = username_accounts_mapper[alias] elif alias.startswith('@'): continue - accounts = [] if account: - accounts.append(account) - if alias in username_accounts_mapper: - accounts += username_accounts_mapper[alias] + _accounts += [account] - for account in accounts: + for account in _accounts: cleaned_accounts_action_bit[account] |= action_bit cleaned_accounts_expired[account].extend(alias_date_expired_mapper[alias])