Python Django Restful API simple JWT

发布时间 2023-06-11 19:30:08作者: skywss27

在这种情况下,您可以创建一个自定义权限类,并检查用户所属的任何组是否具有相应的权限。例如,您可以在 Django 后台为每个组定义一个具有读取权限(`view` 权限)的权限对象。然后,在自定义权限类中检查用户组是否具有此权限。

首先,在 `models.py` 文件中创建一个新的权限。例如,创建一个名为 `APICanRead` 的权限。为了更方便控制权限,我们可以将其附加到一个模型,例如一个名为 `PermissionControl` 的空模型:

```python
from django.db import models

class PermissionControl(models.Model):
class Meta:
permissions = [
("APICanRead", "Can view API"),
]
default_permissions = [] # 清空默认权限,以免混淆
```

接下来,在自定义权限类中检查用户所属的任何组是否具有这个权限:

```python
from rest_framework import permissions

class ApiReadPermission(permissions.BasePermission):
"""
只允许具有读取权限的用户组访问。
"""

def has_permission(self, request, view):
# 检查用户所属的所有组是否具有"APICanRead"权限。
return (
request.user
and request.user.groups.filter(permissions__codename="APICanRead").exists()
)
```

现在,将 `ApiReadPermission` 类添加到您的 APIView:

```python
from rest_framework.views import APIView
from rest_framework.response import Response

class MyAPIView(APIView):
permission_classes = [ApiReadPermission]

def get(self, request, *args, **kwargs):
return Response({'message': '可以访问此 API 的用户组具有读权限'})
```

在这个示例中,我们首先创建了一个名为 `APICanRead` 的新权限,并将其附加到一个名为 `PermissionControl` 的模型。然后,我们在自定义权限类 `ApiReadPermission` 中检查用户所属的任何组是否具有此权限。最后,我们将此权限类添加到APIView。

现在,您可以在 Django 后台为不同的用户组分配或删除 `APICanRead`权限。只有具有此权限的用户组才能访问该 API。如果您需要添加新的组(如 GroupC、GroupD),只需在后台为新组分配 `APICanRead` 权限即可。这种方式使得权限管理变得更加灵活和可扩展。