2016-10-03 6 views
0

Linuxでdjango 1.10 + Apacheを使用しています。 私は小さなwebappを作成して(dropzone.jsを使って)文書をアップロードし、特定のファイルを表示/変更/削除できるユーザーを指定する機能を実装したいが、方法を理解できない。私はManyToManyFieldを使用しようとしましたが、フィールド自体を正しくサポートしていないかもしれません。ユーザがアップロードしたファイルに特定のユーザを割り当てて削除/削除する方法(Django + Apache)

"ドキュメント" モデルはこれです:

モデル

class Document(models.Model): 

    file = models.FileField(upload_to = 'files/') 
           #validators=[validate_file_type]) 
    uploaded_at = models.DateTimeField(auto_now_add = True) 
    extension = models.CharField(max_length = 30, blank = True) 
    thumbnail = models.ImageField(blank = True, null = True) 
    is_public = models.BooleanField(default = False) 
    accesible_by = models.ManyToManyField(User) #This is my attempt at doing this task. 

    def clean(self): 
     self.extension = self.file.name.split('/')[-1].split('.')[-1] 
     if self.extension == 'xlsx' or self.extension == 'xls': 
      self.thumbnail = 'xlsx.png' 
     elif self.extension == 'pptx' or self.extension == 'ppt': 
      self.thumbnail = 'pptx.png' 
     elif self.extension == 'docx' or self.extension == 'doc': 
      self.thumbnail = 'docx.png' 


    def delete(self, *args, **kwargs): 
     #delete file from /media/files 
     self.file.delete(save = False) 
     #call parent delete method. 
     super().delete(*args, **kwargs) 

    #Redirect to file list page. 
    def get_absolute_url(self): 
     return reverse('dashby-files:files') 

    def __str__(self): 
     return self.file.name.split('/')[-1] 

    class Meta(): 
     ordering = ['-uploaded_at'] 

書類の作成を処理するために、マイビュー:

ビュー誰にも事前に

class DocumentCreate(CreateView): 
    model = Document 
    fields = ['file', 'is_public'] 

    def form_valid(self, form): 
     self.object = form.save(commit = False) 
     ## I guess here i would Add the (self.request.user) to the accesible_by Field. 
     self.object.save() 
     data = {'status': 'success'} 
     response = JSONResponse(data, mimetype = 
     response_mimetype(self.request)) 
     return response 

感謝任意のアイデアや提案について...

答えて

0

新しい文書を追加するうえでうまくいくモデルとビューがありますが、まだいくつかのステップがあります。 ファイルを表示/変更/削除できるユーザーを割り当てる場所が必要です。アクセスレベル(表示/削除...)を保存する必要がある場合は、accessible_byで十分ではなく、アクセスレベルのような詳細情報を追加するにはthroughテーブルでうまくいくでしょう。

ビュー、削除などのユーザーが要求するさまざまな操作のビューを作成する必要があります。ここでは、ユーザーに適切な権限があることを確認します。実装では、request.userとdocument idを取得し、ユーザーが何をしているのかについてのアクセス権を持っているか調べ、http許可されていない例外を返すか、アクションを続行します。

編集:私の質問は、私は、各 個々のファイルへのユーザー・アクセス権を割り当てることができる方法についてです

我々はすでに文書モデル君を利用して、Djangoのレベルからコントロールにアクセスするために、これを維持している場合いくつかのステップを踏んだことがあり、すべてのドキュメントでユーザー(accessible_by)を割り当てることができます。このような何かを開始することができます:

from django.core.exceptions import PermissionDenied 
def view_document(request, doc_pk): 
    doc = get_object_or_404(Document, pk=doc_pk) 
    if not doc.accessible_by.filter(username=request.user.username): 
     raise PermissionDenied 
    #perform rest of action 

あなたは権限フレームワーク自体を使用することを意味しますか?

+0

私はそこに悪いです。私はすでに文書を修正して削除することができるという意見を持っています。私の質問は、個々のファイルにユーザー権限を割り当てることができるので、それに基づいて変更/削除することができます。 –

+0

adminを使用してユーザーをドキュメントにすばやく割り当てることができます。モデルのaccessible_byからのユーザー権限は、ドキュメントを持ち、これとそのユーザーがアクセスできることを示唆しているようです。 – keni

+0

はい。正確に何が起こっているのか。もしそれが許可枠組みを持っていなければ、あなたが編集したアプローチを試してみてください。 –

関連する問題