You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:36:03