Django:基于给定给特定用户的组权限显示模型列表(作为文本)的最佳实践

Django:基于给定给特定用户的组权限显示模型列表(作为文本)的最佳实践,django,Django,我主要关心的是显示用户可以基于给定权限与之交互的模型列表 我想通过用户的组权限来实现这一点。我想模拟一下当您向与该模型相关的用户授予任何权限时,Django admin是如何列出模型的,如下所示: 例如,我有一个名为Posts的模型,它具有权限can\u add\u post和can\u delete\u post。我被分配到一个名为Writer的组,该组已被分配了两种权限。在我看来,我希望能够以文本形式检索'Posts'模型的名称,这样我就可以对其执行一些操作,比如设置onClick函数来调

我主要关心的是显示用户可以基于给定权限与之交互的模型列表

我想通过用户的组权限来实现这一点。我想模拟一下当您向与该模型相关的用户授予任何权限时,
Django admin
是如何列出模型的,如下所示:

例如,我有一个名为
Posts
的模型,它具有权限
can\u add\u post
can\u delete\u post
。我被分配到一个名为
Writer
的组,该组已被分配了两种权限。在我看来,我希望能够以文本形式检索
'Posts'
模型的名称,这样我就可以对其执行一些操作,比如设置
onClick
函数来调用相应的React组件,如下所示:

不过,我没有明确的商业逻辑来做这件事。但是,我使用的是DRF,我有一个登录API,我想我可以将逻辑放在这个API中,这样我就可以获取这个登录用户的所有权限,并显示他有权访问的模块

更新: 以下是我的登录API视图:

class LoginAPI(generics.GenericAPIView):
serializer_class = LoginSerializer
permission_classes = ()

def post(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    user = serializer.validated_data
    return Response(
        {
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "token": AuthToken.objects.create(user)[1],
            "authenticated": True
        }
    )
我想你需要这个

from django.contrib.auth.models import Permission

#for user permisions
set(Permission.objects.filter(user=your_user).values_list('content_type__model', flat = True))
#for user groups permisions
set(Permission.objects.filter(group__user=your_user).values_list('content_type__model', flat = True))
这是一个概念,所以你应该根据你的需要调整它

p、 美国:使用
set()
,因为我不知道如何在
content\u type\u model
字段上使用
distinct()
,也许存在一个更优雅的解决方案。

我想你需要这个

from django.contrib.auth.models import Permission

#for user permisions
set(Permission.objects.filter(user=your_user).values_list('content_type__model', flat = True))
#for user groups permisions
set(Permission.objects.filter(group__user=your_user).values_list('content_type__model', flat = True))
这是一个概念,所以你应该根据你的需要调整它


p、 美国:使用
set()
,因为我不知道如何在
content\u type\u model
字段上
distinct()
,可能存在一个更优雅的解决方案。

在我看来,我希望能够以文本形式检索“Posts”模型的名称©从何处检索?显示您的视图代码?我实际上在使用DRF,所以我正在为视图实现API。我没有随身携带笔记本电脑,但我会尽快用我的登录API类(从generics.GenericAPIView扩展)更新上面的内容。我还没有写任何逻辑,因为我现在不知道从哪里开始。我可能需要问一些关于如何做到这一点的见解。我只想列出与授予登录用户权限相关的模型,就像Django Admin列出模型时所做的那样,您可以在模型上添加/更改功能。
在我看来,我希望能够以文本形式检索“Posts”模型的名称©从何处检索?显示您的视图代码?我实际上在使用DRF,所以我正在为视图实现API。我没有随身携带笔记本电脑,但我会尽快用我的登录API类(从generics.GenericAPIView扩展)更新上面的内容。我还没有写任何逻辑,因为我现在不知道从哪里开始。我可能需要问一些关于如何做到这一点的见解。我只想列出与登录用户权限相关的模型,就像Django Admin列出模型时所做的那样,您可以在这些模型上添加/更改功能。谢谢您的回答。我看到上面的代码显示了这些权限所在的应用程序的名称。那太好了。但我最关心的是显示模型名而不是应用程序名。。。感谢查看文档并使用上述概念后,找到了“内容类型模型”的答案。非常感谢…谢谢你的回答。我看到上面的代码显示了这些权限所在的应用程序的名称。那太好了。但我最关心的是显示模型名而不是应用程序名。。。感谢查看文档并使用上述概念后,找到了“内容类型模型”的答案。谢谢。。。