2016-11-17 9 views
1

認証されたユーザー(または特定の権限を持っているユーザー)のみが、DjangoでImageFieldまたはFileFieldを使用してメディアファイルをアップロードできるようにしたいと考えていました。特定のユーザーにDjangoでメディアファイルをアップロードさせる方法

私はこれへの道を見つけようとしました。 認証されたユーザーに、wsgiを使用したApacheの基本認証またはダイジェスト認証によってメディアファイルを表示する方法しか見つからない場合があります。

一時的に、メディアファイルをchmod 777に変更して、誰でも画像をアップロードできるようにしました。しかし、私はそれがセキュリティ問題に関しては良い方法だとは思わない。

特定のユーザー(特定のグループまたはユーザーのユーザーに特定のアクセス許可があるユーザー)のみがApacheでメディアファイルをアップロードできるようにする方法はありますか?

特定のユーザーがDjangoのビューにアップロードできるように許可チェックを行うことができます。しかし、メディアフォルダは777のままです。私は、匿名ユーザーがメディアフォルダの書き込み権限を持つことはできません。

+0

Linuxコンソールの親ディレクトリでls -laを実行してください。私は助けてくれるでしょう。 –

+0

私はあなたにどんな情報を与えるべきですか?メディアフォルダはdrwxrwxrwx 5です。ubuntu ubuntu 4096 – Jayground

+0

今、トップを実行して、あなたのuwsgiまたはgunicornプロセスを実行しているユーザーを教えてください。 –

答えて

0

あなたがdjango-rest-frameworkを使用していることを望みます。

Object level permissionsをdjangoで定義できます。

# 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 # 

[OK]をクリックします。 IsAuthenticatedこの チェック:あなたはあなたのテーブルにユーザーごとにuser_type性を維持するために、次にあなたがこのような各ユーザーを管理することができていReady to use permission classes

P.S。

+0

あなたの答えは、ユーザがdjangoアプリケーションで何かをアップロードする許可を得られるように許可を管理しているのではないでしょうか?問題は、メディアフォルダがUbuntuサーバで777chmodのままであることです。 – Jayground

+0

なぜフォルダのアクセス許可を変更したいのですか?アプリケーション自体からアクセス許可を管理できます。これは私が言うと思う間違った方法です。 – Kishan

+0

ubuntuであなたのフォルダを777パーミッションとして開くと、このフォルダを使ってデータ(画像、ファイルなど)をアップロードしたり編集したりすることができれば、セキュリティ上問題はないようです。 – Jayground

関連する問題