use*_*859 3 permissions django-rest-framework
我想基于视图+方法+用户权限在Django Rest Framework中创建权限。
有没有一种方法可以实现,而无需手动写入每个权限并检查用户所在组的权限?
另外,我面临的另一个问题是,权限对象与特定模型捆绑在一起。由于我有影响不同模型的视图,或者我想对方法PUT授予不同的权限,具体取决于我访问的视图(因为它影响不同的字段),因此我希望将权限绑定到某个视图,而不是某种模式。
有人知道该怎么做吗?
我正在寻找以下解决方案:
1)使用以下参数创建一个Permissions对象:View_affected,list_of_allowed_methods(GET,POST等)
2)创建具有该权限关联的Group对象
3)将用户添加到组
4)让我的默认权限类别负责所有工作。
从现在开始,给我带来麻烦的步骤是步骤1。因为我看不到将View与Permission绑定的方法,并且因为Permissions需要一个模型,所以我不想要一个模型。
任何帮助将不胜感激!
可以通过这种方式创建自定义权限,更多信息在官方文档(https://www.django-rest-framework.org/api-guide/permissions/):
from rest_framework.permissions import BasePermission
# Custom permission for users with "is_active" = True.
class IsActive(BasePermission):
"""
Allows access only to "is_active" users.
"""
def has_permission(self, request, view):
return request.user and request.user.is_active
# Usage
from rest_framework.views import APIView
from rest_framework.response import Response
from .permissions import IsActive # Path to our custom permission
class ExampleView(APIView):
permission_classes = (IsActive,)
def get(self, request, format=None):
content = {
'status': 'request was permitted'
}
return Response(content)
Run Code Online (Sandbox Code Playgroud)
小智 5
好吧,使用DRF可以轻松完成第一步。请参阅http://www.django-rest-framework.org/api-guide/permissions#custom-permissions。
您必须执行以下操作:
from functools import partial
from rest_framework import permissions
class MyPermission(permissions.BasePermission):
def __init__(self, allowed_methods):
super().__init__()
self.allowed_methods = allowed_methods
def has_permission(self, request, view):
return request.method in self.allowed_methods
class ExampleView(APIView):
permission_classes = (partial(MyPermission, ['GET', 'HEAD']),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6161 次 |
| 最近记录: |