Python 权限:在django rest框架中
我正在研究django rest框架。我的权限有问题。 我想给管理员用户授予GET和POST权限,只给其他用户授予POST权限(可信)。到目前为止,我已经编写了以下代码: 佩米西斯酒店Python 权限:在django rest框架中,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在研究django rest框架。我的权限有问题。 我想给管理员用户授予GET和POST权限,只给其他用户授予POST权限(可信)。到目前为止,我已经编写了以下代码: 佩米西斯酒店 class UserAccessPermission(permissions.BasePermission): def has_permission(self, request, view): if request.method == 'GET' or request.method ==
class UserAccessPermission(permissions.BasePermission):
def has_permission(self, request, view):
if request.method == 'GET' or request.method == 'POST':
return request.user and request.user.is_staff
if request.method == 'POST':
return request.user and request.user.is_authenticated()
此代码未按预期工作。只有管理员用户才能获取和发布。其他用户没有获得任何类型的权限
伙计们帮忙。
提前谢谢
已编辑
class UserAccessPermission(permissions.BasePermission):
def has_permission(self, request, view):
if request.method == 'POST':
return request.user and request.user.is_authenticated()
elif request.method == 'GET':
return request.user and request.user.is_staff
您正在使用
elif
,但不会对该部分进行评估,因为如果方法为POST
,则第一个条件始终为True
您的条件中存在错误。如果是GEt请求,则第一个条件始终匹配,这需要管理员权限
以下是您想要的:
class UserAccessPermission(permissions.BasePermission):
def has_permission(self, request, view):
if request.method == 'POST':
return request.user and request.user.is_authenticated()
elif request.method == 'GET': # no need to check for POST here
return request.user and request.user.is_staff
这段代码毫无意义。elif块永远不会被执行。好吧,我忘了编辑admin是否始终具有post权限?是的,如果该方法是post,则如果用户经过身份验证(包括职员/管理员),则该方法将始终返回True。当我在浏览器中以普通(经过身份验证的)用户(不是管理员)身份登录时出现问题,我无法发布,但当我使用邮差浏览器应用程序“然后我就可以在那里发布了。如果你在浏览器中打开开发工具,你就可以看到提出的请求。检查来自Postman的请求与来自浏览器的请求之间的差异。它在Postman中工作,但在可浏览的API文档中不工作,这意味着您发送请求的方式存在一些差异。我怀疑这是身份验证的问题。您对API使用哪种身份验证?