fix: 修复 cache set

pull/7677/head
ibuler 2022-02-22 12:51:06 +08:00 committed by Jiangjie.Bai
parent 534cbf1281
commit 0c95faac04
1 changed files with 12 additions and 6 deletions

View File

@ -167,7 +167,7 @@ class AuthMixin:
class RoleManager(models.Manager): class RoleManager(models.Manager):
scope = None scope = None
__cache = None _cache = None
def __init__(self, user, *args, **kwargs): def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -187,15 +187,18 @@ class RoleManager(models.Manager):
queryset = queryset.filter(scope=self.scope) queryset = queryset.filter(scope=self.scope)
return queryset return queryset
def get_queryset(self): def _get_queryset(self):
if self.__cache is not None:
return self.__cache
from rbac.models import RoleBinding from rbac.models import RoleBinding
queryset = RoleBinding.get_user_roles(self.user) queryset = RoleBinding.get_user_roles(self.user)
if self.scope: if self.scope:
queryset = queryset.filter(scope=self.scope) queryset = queryset.filter(scope=self.scope)
return queryset return queryset
def get_queryset(self):
if self._cache is not None:
return self._cache
return self._get_queryset()
def clear(self): def clear(self):
if not self.scope: if not self.scope:
return return
@ -227,7 +230,9 @@ class RoleManager(models.Manager):
self.add(*roles) self.add(*roles)
def cache_set(self, roles): def cache_set(self, roles):
self.__cache = roles query = self._get_queryset()
query._result_cache = roles
self._cache = query
class OrgRoleManager(RoleManager): class OrgRoleManager(RoleManager):
@ -270,9 +275,10 @@ class RoleMixin:
@lazyproperty @lazyproperty
def is_superuser(self): def is_superuser(self):
""" """
由于这里用了 cache 所以不能改成 self.system_roles.filter().exists() 由于这里用了 cache 所以不能改成 self.system_roles.filter().exists() 会查询的
""" """
from rbac.builtin import BuiltinRole from rbac.builtin import BuiltinRole
# return self.system_roles.all().filter(id=BuiltinRole.system_admin.id).exists()
ids = [str(r.id) for r in self.system_roles.all()] ids = [str(r.id) for r in self.system_roles.all()]
yes = BuiltinRole.system_admin.id in ids yes = BuiltinRole.system_admin.id in ids
return yes return yes