如何让特定用户在Django中上传媒体文件

时间:2016-11-17 07:20:08

标签: python django apache permissions

我想只允许一些经过身份验证的用户(或使用具有特定权限)才能在Django中使用ImageField或FileField上传媒体文件。

我试图找到一种方法。 我只能找到让经过身份验证的用户通过apache基本或使用wsgi进行摘要式身份验证来查看媒体文件的方法。

暂时,我将媒体文件更改为chmod 777,以允许任何人上传图片。但我不认为这是安全问题的好方法。

有没有办法让只有特定用户(即特定组中的用户或用户具有特定权限)才能在Apache中上传媒体文件?

我可以进行权限检查,让特定用户可以在Django的视图中上传。但媒体文件夹仍然是777.我不想留下匿名用户可以读取媒体文件夹的写入权限。

1 个答案:

答案 0 :(得分:0)

我希望您使用的是django-rest-framework。

您可以在django中定义Object level permissions

# permissions.py

class IsAllowedToUpload(permissions.BasePermission):
    """
    Custom permission to only allow certain users to upload media
    """

    def has_permission(self, request, view, obj=None):
        # write permission that allows only certain type of users to upload media. 
        # Note that this method should return True of False only.
        return request.user.user_type == 'TYPE_YOU_WANT_TO_ALLOW'

然后在处理上传功能的views.py中。

class MyExampleView(generics.GenericAPIView):
    permission_classes = (IsAllowedToUpload, )
    # code #

好的,如果您只想允许登录用户,则可以使用一些预定义的权限类,您可以直接使用这些权限。 IsAuthenticated 检查一下:Ready to use permission classes

P.S您必须为表中的每个用户维护user_type属性,然后您可以像这样管理每个用户。