Django用户权限逻辑解析与修复:管理员权限失效问题排查
Django权限逻辑条件失效原因分析
先看你写的第一个条件:if (request.user != comment.user) or (not request.user.is_superuser):
这个逻辑的核心问题是逻辑运算符用错了。你原本想阻止的是「既不是内容所有者,又不是超级管理员」的用户,但这里用了or,导致只要满足其中一个条件就会触发阻止:
- 对于超级管理员来说,如果他不是这条评论的所有者,
request.user != comment.user为真,整个or条件就成立,所以会被阻止编辑; - 只有当超级管理员同时也是评论所有者的时候,两个条件都不满足,才能编辑,这显然不符合需求。
再看正确的条件:if not (request.user.is_superuser or (request.user == blog.blog_author)):
这里用not包裹了「是超级管理员 或者 是内容所有者」的判断,意思是:当用户既不是超级管理员,也不是内容所有者的时候,才阻止编辑,完全匹配你需要的「所有者和管理员都能编辑」的逻辑。
其实你也可以把第一个条件改成if (request.user != comment.user) and (not request.user.is_superuser):——这个写法和正确条件是等价的,本质都是判断「用户既不是所有者也不是管理员」,这样就能正常生效。
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

