如何在带有 Django Rest 框架的 React 前端使用 Django 用户组和权限

Posted

技术标签:

【中文标题】如何在带有 Django Rest 框架的 React 前端使用 Django 用户组和权限【英文标题】:How to use Django User Groups and Permissions on a React Frontend with Django Rest Framework 【发布时间】:2019-06-26 01:10:03 【问题描述】:

我在前端使用带有 React 的 Django Rest Framework。我正在使用令牌认证并且一切正常。我现在需要确保不同的用户可以根据他们的权限访问不同的东西。使用 Django admin 可以做到这一点,但我的用户将使用 React 前端。

我查看了Django Rest permissions,但我没有看到如何在我的 React 前端使用它。我还查看了Django guardian,但我不确定它是否满足我的要求。我浏览了许多教程和文章,但似乎找不到任何直接的方法来实现这一点。

这是我目前使用的方法: 为内置的用户模型创建了一个序列化器,然后创建了一个视图集,我现在可以通过 api 访问用户列表。

from django.contrib.auth.models import User

class UserSerializer(SerializerExtensionsMixin,serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

class UserViewSet(SerializerExtensionsAPIViewMixin, viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()

router = DefaultRouter()
router.register(r'user', UserViewSet, basename='user')

使用它,我可以访问具有组和权限的用户,如下图所示。我现在继续在我的 React 前端调用 api url,并以某种方式使用与用户关联的权限和组来控制用户可以看到的内容。

有没有更好的方法来实现这个要求?我这样做对吗?有人这样做过吗?我可以借鉴他们的经验吗?

【问题讨论】:

您也可以序列化组和权限,并在用户序列化器中使用该序列化器。将用户的组和权限保存在您的 redux 商店中(我猜您正在使用 redux 来管理状态)。然后您可以使用组/权限名称检查权限,而不是依赖 id,因为 id 可以在 dev 和 prod 环境中更改。在反应中编写一个自定义组件,它将获取哪些组和权限可以通过道具查看它。它可以连接到 redux 存储并检查用户是否属于该组,并呈现子级或重定向。然后将你的东西包装在该组件中 这个问题你解决了吗,如果解决了? 【参考方案1】:

DRF 提供权限类,此外,如果您需要一些自定义,您可以通过创建自定义权限类来实现。参考https://www.django-rest-framework.org/api-guide/permissions/#api-reference。

在 React 方面,如果您使用 React 路由器,您可以在从后端接收的某些角色/权限上保护每条路由。 参考https://hackernoon.com/role-based-authorization-in-react-c70bb7641db4 这可能对你有帮助

【讨论】:

以上是关于如何在带有 Django Rest 框架的 React 前端使用 Django 用户组和权限的主要内容,如果未能解决你的问题,请参考以下文章

带有 Django 2.0 的 Django REST 框架 URL

带有 ChoiceField 的 Django Rest 框架

你如何在 django rest 框架中实现 CSRF 令牌?

带有 CSRF/CORS 的带有 TokenAuthentication 的 Django REST 框架

在带有 json api 的 django rest 框架中使用 slug 而不是 ID

带有自定义查询的Django Rest框架