From 8c6542915709a0fe23d7e1d5edb52b4d8a6bba14 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 8 Feb 2023 10:30:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20perms=20=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/models/user.py | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/apps/users/models/user.py b/apps/users/models/user.py index 44d4184ce..b487365e5 100644 --- a/apps/users/models/user.py +++ b/apps/users/models/user.py @@ -331,6 +331,7 @@ class RoleMixin: _org_roles = None _system_roles = None PERM_CACHE_KEY = 'USER_PERMS_ROLES_{}_{}' + PERM_ORG_KEY = 'USER_PERMS_ORG_{}' _is_superuser = None _update_superuser = False @@ -348,29 +349,39 @@ class RoleMixin: @lazyproperty def console_orgs(self): - return self.cached_role_and_perms['console_orgs'] + return self.cached_orgs['console_orgs'] @lazyproperty def audit_orgs(self): - return self.cached_role_and_perms['audit_orgs'] + return self.cached_orgs['audit_orgs'] @lazyproperty def workbench_orgs(self): - return self.cached_role_and_perms['workbench_orgs'] + return self.cached_orgs['workbench_orgs'] + + @lazyproperty + def cached_orgs(self): + from rbac.models import RoleBinding + key = self.PERM_ORG_KEY.format(self.id) + data = cache.get(key) + if data: + return data + data = { + 'console_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_console', self), + 'audit_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_audit', self), + 'workbench_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_workbench', self), + } + cache.set(key, data, 60 * 60) + return data @lazyproperty def cached_role_and_perms(self): - from rbac.models import RoleBinding - key = self.PERM_CACHE_KEY.format(self.id, current_org.id) data = cache.get(key) if data: return data data = { - 'console_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_console', self), - 'audit_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_audit', self), - 'workbench_orgs': RoleBinding.get_user_has_the_perm_orgs('rbac.view_workbench', self), 'org_roles': self.org_roles.all(), 'system_roles': self.system_roles.all(), 'perms': self.get_all_permissions(), @@ -381,11 +392,15 @@ class RoleMixin: def expire_rbac_perms_cache(self): key = self.PERM_CACHE_KEY.format(self.id, '*') cache.delete_pattern(key) + key = self.PERM_ORG_KEY.format(self.id) + cache.delete(key) @classmethod def expire_users_rbac_perms_cache(cls): key = cls.PERM_CACHE_KEY.format('*', '*') cache.delete_pattern(key) + key = cls.PERM_ORG_KEY.format('*') + cache.delete_pattern(key) @lazyproperty def perms(self):