首页 > 解决方案 > Django DRF 角色级别权限

问题描述

我已经使用 DRF 开发了 API。我正在努力将授权部分与我们在管理部分中为 API 的每个角色定义的 Django 默认权限相关联。

假设我有两个 API Customer ManagementCustomer Sales并且在 Django 管理门户中从它们创建了两个角色。manager角色将只管理客户(add、、和) view,而角色将管理每个客户的销售( 、、和)。deleteupdatesalesaddviewdeleteupdate

当我尝试在管理门户中测试它们时,权限工作正常。对应的角色有对应的权限。如果我将其与 REST API 一起使用,则它不符合后端定义的权限。就像两个角色都能够访问这两个 API。

我该如何处理?我应该实现自己的权限系统而忽略 Django 中使用的旧权限系统(auth_permission, auth_group_permissions, auth_user_user_permissions),还是有任何解决方法可以使用 Django 权限来完成这项工作?

标签: djangodjango-rest-frameworkdjango-rest-authdjango-permissions

解决方案


您可以使您的权限类如下

class CustomPermission(BasePermission):
    def has_permission(self, request, view):
        if request.user.is_authenticated():
            return True if request.has_perm('can_read') else False # or stuff similar to this 
        return False

并将此类CustomPermission用于您APIView的属性。

有关DRF 权限的更多信息,请访问https://www.django-rest-framework.org/api-guide/permissions/


推荐阅读