ユーザーのアクセス権限を制限させたいです
現在、簡易的な投稿サイトを作っており、投稿した本人だけしか編集できないようにしたいのですが、
こちらの回答者様がおっしゃるように、リンクに直入力されてしまうと、他のユーザーでも編集ができてしまいます。
投稿した本人だけが編集できるようにするにはどうすれば良いでしょうか。
このような場合は、updateviewをクラスにした方がいいのでしょうか?
それとも関数はそのままで、何かを加えれば制限をかけられるのでしょうか?
具体的なアドバイスをいただきたいです。よろしくお願いいたします。
python
1class OnlyYouMixin(UserPassesTestMixin): 2 """本人か、スーパーユーザーだけユーザーページアクセスを許可する""" 3 raise_exception = True 4 5 def test_func(self): 6 user = self.request.user 7 return user.user_name == self.kwargs['user_name'] or user.is_superuser 8 9 10 11class UserUpdate(OnlyYouMixin, generic.UpdateView): 12 """ユーザー情報更新ページ""" 13 model = User 14 form_class = UserUpdateForm 15 template_name = 'app/user_form.html' # デフォルトユーザーを使う場合に備え、きちんとtemplate名を書く 16 slug_field = 'user_name' 17 slug_url_kwarg = 'user_name' 18 def get_success_url(self): 19 return reverse_lazy('app:user_detail', kwargs={'user_name': self.object.user_name}) 20 21 22def update_post(request, pk): 23 post = get_object_or_404(Item, pk=pk) 24 form = PostForm(request.POST or None, files=request.FILES or None, instance=post) 25 formset = Formset(request.POST or None, request.FILES or None, instance=post) 26 is_valid = formset.is_valid() 27 28 if request.method == 'POST' and formset.is_valid(): 29 form.save() 30 formset.save() 31 return redirect('app:top') 32 33 context = { 34 'formset': formset, 35 'form': form 36 } 37 38 return render(request, 'app/item_update.html', context) 39 40class ItemDeleteView(LoginRequiredMixin, DeleteView): 41 model = Item 42 success_url = reverse_lazy('app:top') 43 44 def dispatch(self, request, *args, **kwargs): 45 obj = self.get_object() 46 if obj.post_user != self.request.user: 47 raise Http404("You are not allowed to edit this Post") 48 return super(ItemDeleteView, self).dispatch(request, *args, **kwargs) 49 50 def delete(self, request, *args, **kwargs): 51 result = super().delete(request, *args, **kwargs) 52 messages.error(self.request, '削除しました'.format(self.object)) # 追加 53 return result 54
ちなみに他の権限が必要なページ(削除ページ、マイぺージ編集)はクラスで作っているため権限の制限ができています。
編集ページだけは、自分で関数を作ったので権限の制限方法が解りません。
必要なものがあれば追記いたします。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/16 09:07