1

私が取り組んでいるプロジェクト管理アプリでは、ユーザーがプロジェクトの管理者またはプロジェクトのメンバーである場合にのみ、プロジェクトを表示できるようにしたいと考えています。

以下のビューは (もちろん) 機能しませんが、ユーザーがプロジェクトの管理者であるかどうかを確認する 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
4

1 に答える 1

0

あなたは正しい軌道に乗っていると思います。このコードを試してみてください-いくつかのアイデアが得られるはずです-

@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 request.user in project.users.all or project.owned_by_user(request.user):
        return render(request, 'projects/show.html', {"project" : project, "tickets" : tickets})
    else:
        return render(request, 'projects/show.html', {"error_message": "You don't have permission to view the project"})

次に、テンプレートで

{% if error_message %}
    <p>{{ error_message }}</p>
{% else %}
   {% for ticket in tickets %}
        <p>{{ ticket }}</p>
   {% endfor %}
    <div>{{ project }}</div>
{% endif %}
于 2013-03-05T20:07:20.633 に答える