Django CMS:原权限查询返回False,如何检查用户查看其他页面权限?
正确检查Django CMS用户页面查看权限的方法
你的代码仅检查了直接绑定到该用户、针对目标页面的查看权限,但Django CMS的权限系统支持多种权限来源:用户组权限、从父页面继承的权限、全局权限,直接过滤PagePermission会漏掉这些场景,导致返回False。
推荐使用CMS内置的权限检查方法,它会自动处理所有权限逻辑:
from cms.utils.permissions import has_view_permission # 检查用户是否有权限查看page_to_check if has_view_permission(request.user, page_to_check): # 执行有权限的逻辑 pass else: # 执行无权限的逻辑 pass
如果需要手动查询PagePermission表(不推荐,内置方法已封装所有场景),需覆盖所有可能的权限来源:
from django.db.models import Q from django.contrib.auth.models import Group from cms.models.permissionmodels import PagePermission user_groups = request.user.groups.all() # 组合权限查询条件 permission_exists = PagePermission.objects.filter( can_view=True, # 权限属于用户本人或用户所在的组 (Q(user=request.user) | Q(group__in=user_groups)), # 权限适用于目标页面、目标页面的父页面(且允许继承)、或全局权限(无特定页面) (Q(page=page_to_check) | Q(page__in=page_to_check.get_ancestors(), inherit=True) | Q(page__isnull=True)) ).exists() if permission_exists: # 用户有权限 pass
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

