【问题标题】:Django DRF role level permissionDjango DRF 角色级别权限
【发布时间】:2019-07-29 11:29:48
【问题描述】:

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

假设我有两个 API 的 Customer ManagementCustomer Sales 并在 Django 管理门户中从它们创建了两个角色。 manager 角色将只管理客户(addviewdeleteupdate),而 sales 角色将管理销售(addviewdelete 和 @9876543) 每位客户

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

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

【问题讨论】:

  • api_views 不使用 django 的默认权限。看看django-rest-framework.org/api-guide/permissions/…
  • 所以技术上我可以忽略它们并设计我自己的模型,是吗?
  • 可以,但是我提供的链接显示你也可以使用django的默认权限模型。
  • 好的,如果你必须使用 Angular 或 react 作为前端,你建议使用哪个。使用默认或自定义授权。?
  • 这是一个很难回答的问题,并且因用例而异。您应该注意到,使用内置 django 权限的一个主要优点是使用 django 的管理页面更容易编辑它们,这为您提供了一个现成的后台。如果您重新实现权限,则必须添加自己的管理系统。

标签: django django-rest-framework django-rest-auth django-permissions


【解决方案1】:

您可以将您的权限类设置如下

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 permissions的更多信息,请访问https://www.django-rest-framework.org/api-guide/permissions/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2022-01-23
    • 2023-03-15
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多