权限拒绝由装饰器引起的错误

2024-04-20 15:22:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个图像模型,它有一个来自django user的用户字段foreignkey

class Image(models.Model):
    image = models.ImageField()
    user = models.ForeignKey(User)
    #more specific model fields

我希望媒体文件只提供给用户登录和上传的媒体。所以我在apache中使用了X-SendFile头,使用了以下视图

^{pr2}$

owns_media是一个decorator,它检查登录的用户是否是上载图片并允许视图运行或引发PermissionDenied异常的用户。这是装修工

def owns_media(view):
    """Decorator to check if users has permission to access media"""
    def wrapper(request, *args, **kw):
        path = kw['path']
        user = request.user
        image = Image.objects.get(image=path)
        image_user = image.user
        if user==image_user:
            return view(request, *args, **kw)
        else:
            raise PermissionDenied
    return wrapper

但这行不通。我登录到一个用户得到了图片,然后注销并试图访问它,它确实提供了图片,而它不应该。我做错什么了吗?在


Tags: path用户imageview视图modelsrequestdef