gpt4 book ai didi

django - 无法实现django-rules授权

转载 作者:行者123 更新时间:2023-12-04 17:36:38 25 4
gpt4 key购买 nike

我是一名 Django 新用户,正在寻求有关 django-rules 的帮助。我正在尝试建立一个基于'OR' 的授权系统。我有一个"file"模型。我希望只有创建者能够删除它,但一组特定的用户可以编辑它。我一直能够遵循他们的教程和实现;它在 shell 中有效,但在我的网站上无效。目前没有人可以删除或更新任何内容。

我的 View 目前看起来像:

class FileUpdateView(PermissionRequiredMixin, generics.RetrieveUpdateAPIView):
"""
View updating details of a bill
"""
queryset = File.objects.all()
serializer_class = FileSerializer
permission_required = 'fileupload.change_file'
raise_exception = True

class FileDeleteView(PermissionRequiredMixin, generics.RetrieveDestroyAPIView):
"""
View for deleting a bill
"""
queryset = File.objects.all()
serializer_class = FileSerializer
permission_required = 'fileupload.delete_file'
raise_exception = True

规则本身是:

import rules

@rules.predicate
def is_creator(user, file):
"""Checks if user is file's creator"""
return file.owner == user

is_editor = rules.is_group_member('ReadAndWrite')

rules.add_perm('fileupload.change_file', is_editor | is_creator)
rules.add_perm('fileupload.delete_file', is_creator)

我知道我已经接近了,但我觉得我只差一步。

提前致谢!

最佳答案

请检查并添加 Django 规则的设置文件身份验证后端。此外,您将 Django rest 权限与 Django-rules 权限混合在一起。你需要在 Django-rest permissions on view 中检查 Django-rules permission。

简而言之。

像这样在 rest-framework 中定义自定义权限。

from rest_framework import permissions


class RulesPermissions(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return request.user.has_perm('books.edit_book', obj)

在 View 集中。

class BookView(viewsets.ModelViewSet):
permission_classes = (RulesPermissions,)

关于django - 无法实现django-rules授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44772869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com