[英]How do I assign specific users to a user-uploaded file so they can modify it/delete it (Django + Apache)
我在Linux中使用django 1.10 + Apache。 我已经创建了一个小型的Webapp来上传文档(使用dropzone.js),并希望实现用户指定谁可以查看/修改/删除特定文件的功能,但是我不知道该怎么做。 我尝试使用ManyToManyField,但可能即时通讯没有正确理解Field本身。
“文档”模型是这样的:
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
在此先感谢任何人的任何想法或建议...
您有一个模型和一个希望可以用于添加新文档的视图,但是您仍然需要执行许多步骤。 您需要一个位置来分配可以查看/修改/删除文件的用户。 如果您需要存储访问级别(查看/删除...),那么accessible_by将不足以满足您的需求,并且可以通过一个贯通表来添加更多信息,例如访问级别。
您需要为用户将请求的各种操作(例如视图,删除...)编写视图,并在此处确保用户具有正确的特权。 一种实现是获取request.user和文档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
还是您要使用权限框架本身?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.