正在处理Django项目,根据用户的组权限限制API访问

b1payxdu  于 2023-04-07  发布在  Go
关注(0)|答案(1)|浏览(121)

我有一个自定义的用户模型与组作为一个领域。

from django.contrib.auth.models import Group
class Users(AbstractBaseUser): 
    group=models.ManyToManyField(Group, blank=True)

我在Django管理面板中为组分配模型权限。现在我想确保在用户可以访问API之前,应该检查用户的组权限,如下所示:

@authentication_classes([TokenAuthentication])
class SiteList(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated, GroupPermission] //GroupPermission as a check
    queryset = Site.objects.all()
    serializer_class = SiteSerializer
e5nqia27

e5nqia271#

尝试为此视图创建自定义权限。
检查用户是否具有“客户”组的示例:

from rest_framework import permissions

class GroupPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        if "Customer" in request.user.group.values_list("name", flat=True):
            return True
        return False

然后将其添加到permission_classes变量。
如果你想检查组应该拥有的确切权限,那么你可以进行以下检查:

if Permission.objects.filter(Q(user=request.user) | Q(group__user=request.user), codename="can_do_something").exists()

更多信息:https://www.django-rest-framework.org/api-guide/permissions/

相关问题