博客应用的权限管理

举报
码乐 发表于 2024/04/01 10:27:48 2024/04/01
【摘要】 1 查看和编辑权限 Permissions权限和安全性是任何网站的重要组成部分,并且对于Web API而言则至关重要。现在rest_framework 有out-of-the-box 权限可以应用于项目水平,视图层 或 个人模型 ( project-level, a view-level,individual model level.)创建一个用户,并赋予它不同权限。在 127.0.0.1...

1 查看和编辑权限 Permissions

权限和安全性是任何网站的重要组成部分,并且对于Web API而言则至关重要。

现在rest_framework 有out-of-the-box 权限可以应用于项目水平,视图层 或 个人模型 ( project-level, a view-level,individual model level.)

创建一个用户,并赋予它不同权限。

在 127.0.0.1:2000/admin/ 添加一个用户(user) 用户名/密码: testuser/user.123 其他不做操作,保存后转跳至用户列表。

今后,无论何时我们想在用户帐户之间切换时,都需要跳到Django管理员,退出一个帐户,然后登录另一个帐户。每次。然后切换回到我们的API端点。

Django REST Framework具有单行设置来添加登录并直接注销到可操作的API。

在项目级别的urls.py文件中,添加一个包含rest_framework.urls的新URL路由。使用 api/auth 匹配,只有登录后认证的用户可以查看。

    # config/urls.py
	from django.contrib import admin
	from django.urls import include, path
	urlpatterns = [
		path('admin/', admin.site.urls),
		path('api/v1/', include('posts.urls')),
		path('api/auth/', include('rest_framework.urls')),  
	]
    

访问 <http://127.0.0.1:8000/api/v1/
上的可浏览API。有一个细微的变化:右上角的用户名旁边点击可以发现> logout 登出按钮。

登出后 被重定向到Django REST Framework的登录页面,使用新用户 testuser登录。

登录后可以发现,所有api都没有进行权限限制,可以被任何人使用。 即使登出testuser 也一样。 任何用户都可以查看删除修改文章。

1.1 项目级别授权

这是因为 “发布列表”端点以及“详细列表”端点,是我们之前在config/settings.py中将项目的项目级别权限设置为AllowAny。

我们可以在多个层次操作权限

 this—project-level, view-level,   object-level—but

视图权限 这里有两个视图,让我们为它们都添加权限。

from rest_framework import generics, permissions #权限

每个视图类都增加权限属性。 只有登录后认证的用户可以查看

    class PostList(generics.ListCreateAPIView):
    	permission_classes = (permissions.IsAuthenticated,) 
    	...
    class PostDetail(generics.RetrieveUpdateDestroyAPIView):
		permission_classes = (permissions.IsAuthenticated,) 
		...

刷新可浏览的API,网址为http://127.0.0.1:8000/api/v1/。看看发生了什么,此时后台将返回 403 拒绝消息

	HTTP 403 Forbidden
	Allow: GET, POST, HEAD, OPTIONS
	Content-Type: application/json
	Vary: Accept

	{
	    "detail": "Authentication credentials were not provided."
	}

向每个视图添加专用的Permission_classes如果要在整个API上设置相同的权限设置,则重复此操作。最好一次更改我们的权限(最好是在项目级别)。

2 小结

在项目级别设置严格的权限策略,并根据需要在视图级别放宽策略。这就是我们要做的。

REST_Framework随附了许多内置的项目权限管理级别,我们将继续探索。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。