fix: base permission获取优化

This commit is contained in:
caoqianming 2024-10-20 10:46:06 +08:00
parent 27f7b3c076
commit ca32d9f20f
2 changed files with 7 additions and 14 deletions

View File

@ -13,7 +13,7 @@ ALL_PERMS = [
# 数据库里定义的权限标识 # 数据库里定义的权限标识
def get_alld_perms(update_cache=False) -> List[str]: def get_alld_perms(update_cache=False) -> List[str]:
key = "perms_alld_list" key = "perms_alld_list"
perms_alld_list = cache.get(key) perms_alld_list = cache.get(key, None)
if perms_alld_list is None or update_cache: if perms_alld_list is None or update_cache:
nested_list = Permission.objects.all().values_list('codes', flat=True) nested_list = Permission.objects.all().values_list('codes', flat=True)
perms_alld_list = list(set([item for sublist in nested_list for item in sublist])) perms_alld_list = list(set([item for sublist in nested_list for item in sublist]))
@ -26,7 +26,8 @@ def get_user_perms_map(user, update_cache=False):
获取权限字典,可用redis存取(包括功能和数据权限) 获取权限字典,可用redis存取(包括功能和数据权限)
""" """
key = f'perms_{str(user.id)}' key = f'perms_{str(user.id)}'
if cache.get(key) is None or update_cache: user_perms_map = cache.get(key, None)
if user_perms_map is None or update_cache:
user_perms_map = {} user_perms_map = {}
if user.is_superuser: if user.is_superuser:
codes = get_alld_perms() codes = get_alld_perms()
@ -58,8 +59,6 @@ def has_perm(user: User, perm_codes: List[str]):
""" """
返回用户是否具有给定权限列表中的权限 返回用户是否具有给定权限列表中的权限
""" """
user_perms_map = cache.get(f'perms_{user.id}', None)
if user_perms_map is None:
user_perms_map = get_user_perms_map(user) user_perms_map = get_user_perms_map(user)
for item in perm_codes: for item in perm_codes:
if item in user_perms_map: if item in user_perms_map:
@ -81,8 +80,6 @@ class RbacPermission(BasePermission):
""" """
if not hasattr(view, 'perms_map'): if not hasattr(view, 'perms_map'):
return True return True
user_perms_map = cache.get('perms_' + request.user.id, None)
if user_perms_map is None:
user_perms_map = get_user_perms_map(request.user) user_perms_map = get_user_perms_map(request.user)
if isinstance(user_perms_map, dict): if isinstance(user_perms_map, dict):
perms_map = view.perms_map perms_map = view.perms_map
@ -125,8 +122,6 @@ class RbacDataMixin:
if hasattr(queryset.model, 'belong_dept'): if hasattr(queryset.model, 'belong_dept'):
user = self.request.user user = self.request.user
user_perms_map = cache.get('perms_' + user.id, None)
if user_perms_map is None:
user_perms_map = get_user_perms_map(self.request.user) user_perms_map = get_user_perms_map(self.request.user)
if isinstance(user_perms_map, dict): if isinstance(user_perms_map, dict):
if hasattr(self.view, 'perms_map'): if hasattr(self.view, 'perms_map'):

View File

@ -116,8 +116,6 @@ class CustomGenericViewSet(MyLoggingMixin, GenericViewSet):
user = self.request.user user = self.request.user
if user.is_superuser: if user.is_superuser:
return queryset return queryset
user_perms_map = cache.get('perms_' + str(user.id), None)
if user_perms_map is None:
user_perms_map = get_user_perms_map(self.request.user) user_perms_map = get_user_perms_map(self.request.user)
if isinstance(user_perms_map, dict): if isinstance(user_perms_map, dict):
if hasattr(self, 'perms_map'): if hasattr(self, 'perms_map'):