Tình hình khá đơn giản: Tôi đang viết hệ thống blog nhiều người dùng. Hệ thống sẽ ngăn không phải chủ sở hữu chỉnh sửa hoặc xóa bài đăng trên blog. Theo quan điểm của tôi, tôi sử dụng chế độ xem chung.Thêm mức quyền đối tượng vào chế độ xem chung
lớp BlogUpdateView (UpdateView): ...
Tôi biết tôi nên sử dụng để trang trí @method_decorator phương pháp công văn. Tuy nhiên, hầu hết các ví dụ chỉ là @method_decorator (login_required) hoặc cấp phép mô hình. Làm thế nào có thể áp dụng quyền đối tượng cấp để kiểm tra xem request.user là tác giả của bài đăng blog này? Ví dụ, tôi đã cố gắng sử dụng các ứng dụng django-authority, và tôi có một lớp BlogPermission trong tệp này. và tôi đã cố gắng xác định một phương thức trong lớp này, ví dụ:
def blog_edit(self, ??, ??)
tôi nên đưa vào phương pháp này như thế nào?
Và sau đó gọi này như: @method_decorator(permission_required('blog_permission.blog_edit(???)'))
tôi nên vượt qua gì ở đây?
Cập nhật: Sau khi đọc mã phương thức_decorator, tôi thấy nó chỉ có thể chấp nhận hàm không có đối số. Tôi nghĩ đó là lý do tại sao permission_required không hoạt động ở đây. Nhưng công việc xung quanh về điều này là gì?
giải pháp Cập nhật:
Trong phương pháp văn, tôi kiểm tra sự cho phép người sử dụng và sau đó trở về HttpResponseForbidden() nếu người dùng không đáp ứng được sự cho phép.
Bạn có thể kiểm tra quyền của bạn trong 'phương pháp get_object'. Trang trí trông không tốt với CBV. – ilvar
vì vậy bạn có nghĩa là không có cách nào dễ dàng để áp dụng trang trí cấp đối tượng vào chế độ xem chung dựa trên Lớp học? @ilvar – Xinghan
Tôi có nghĩa là nó sẽ được dễ dàng hơn để làm trong 'get_object'. Để làm cho nó thêm DRY, bạn có thể tạo một Mixin với 'get_object' và sử dụng nó. – ilvar