You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中基于用户组权限限制API访问的实现

Django基于用户组的API权限校验实现方案

1. 自定义GroupPermission权限类

创建继承自BasePermission的权限类,实现组权限校验逻辑:

from django.contrib.auth.models import Permission
from rest_framework.permissions import BasePermission

class GroupPermission(BasePermission):
    """校验用户所属组是否拥有访问API所需的模型权限"""
    def has_permission(self, request, view):
        user = request.user
        
        # 超级用户直接放行
        if user.is_superuser:
            return True
        
        # 获取当前视图对应的模型
        model_cls = view.queryset.model
        
        # 映射请求方法到权限后缀
        permission_suffix_map = {
            'GET': 'view',
            'POST': 'add',
            'PUT': 'change',
            'PATCH': 'change',
            'DELETE': 'delete'
        }
        permission_suffix = permission_suffix_map.get(request.method)
        
        if not permission_suffix:
            return False
        
        # 构造完整权限代码名
        permission_codename = f"{permission_suffix}_{model_cls._meta.model_name}"
        
        # 查询用户所属组的所有权限
        group_permissions = Permission.objects.filter(group__user=user)
        
        # 检查是否存在目标权限
        return group_permissions.filter(codename=permission_codename).exists()

2. 在视图中配置权限类

确保SiteList视图正确导入并使用自定义权限类:

from rest_framework.authentication import TokenAuthentication
from rest_framework.generics import ListCreateAPIView
from rest_framework.permissions import IsAuthenticated
from .models import Site
from .serializers import SiteSerializer
from .permissions import GroupPermission

@authentication_classes([TokenAuthentication])
class SiteList(ListCreateAPIView):
    permission_classes = [IsAuthenticated, GroupPermission]
    queryset = Site.objects.all()
    serializer_class = SiteSerializer

3. 关键注意事项

  • 权限自动匹配:根据请求方法自动对应模型权限(如GET请求校验view_site,POST校验add_site)
  • 自定义模型兼容:你的Users模型已通过ManyToManyField关联Group,权限类可直接适配
  • 后台权限配置:需在Django管理面板中为目标用户组分配对应模型的具体权限(如查看站点、添加站点等)
  • 超级用户豁免:超级用户默认跳过组权限校验,直接拥有所有API访问权限

内容的提问来源于stack exchange,提问作者Arshdeep Singh Bhatia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:12:11