私が取り組んでいるプロジェクト管理アプリでは、ユーザーがプロジェクトの管理者またはプロジェクトのメンバーである場合にのみ、プロジェクトを表示できるようにしたいと考えています。
以下のビューは (もちろん) 機能しませんが、ユーザーがプロジェクトの管理者であるかどうかを確認する 1 つの方法を示しています。ユーザーがメンバーであるかどうかを確認する方法を私が知っている 1 つの方法は、次のクエリを使用することです。
projects = get_list_or_404(Project.objects.filter(users__id__iexact=request.user.id))
...ただし、ユーザーがこの目的でプロジェクトを表示する権限を持っているかどうかを確認し、そうでない場合はアクセスを許可しないこれらの方法を (使用する必要がある場合) 使用する方法についてはわかりません。
これはどのように行うことができますか?
見る:
@login_required
def show_project(request, project_id):
project = get_object_or_404(Project, pk = project_id)
tickets = Ticket.objects.filter(project_id = project_id)
if project.owned_by_user(request.user):
???
elsif
else:
message = "You don't have permission to the project"
return render(request, 'projects/show.html', {"project" : project, "tickets" : tickets, "message": message})
モデル:
class Project(models.Model):
...other fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects') <-- members
def __unicode__(self):
return self.name
def owned_by_user(self, user):
return self.added_by_user == user