Kiểm tra quyền bên trong mẫu trong Django


90

Tôi có thể sử dụng kiểm tra quyền của ứng dụng Auth bên trong mẫu trong Django không? (Tôi muốn hiển thị một biểu mẫu đơn giản ở cuối mẫu cho người dùng đặc quyền)

Và quan trọng hơn, tôi có nên làm điều đó không hay đây không phải là "cách của Django"?


Đối với những người như tôi, những người tình cờ gặp phải điều này sau đó, liên kết cho Django 1.5 đã được thay đổi một chút. Thông tin hiện có thể được tìm thấy trong tài liệu tại url này: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions Không có gì trong câu trả lời ban đầu thực sự thay đổi, nhưng đây chỉ là một url mới :)
Xudonax

Câu trả lời:


187

Nếu bạn đang tìm kiếm quyền trong các mẫu, mã sau đây sẽ đủ:

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

Trong đó mô hình đề cập đến mô hình mà người dùng cần quyền để xem biểu mẫu.

Tham khảo https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions để biết thêm ví dụ.

Quyền của người dùng hiện đã đăng nhập được lưu trữ trong biến mẫu {{ perms }}

(Điều này yêu cầu bộ xử lý ngữ cảnh sau được bật django.contrib.auth.context_processors.auth:)


14
Lưu ý rằng nếu bạn đăng nhập với tư cách là superuser, điều đó perms.app_label.foobarsẽ luôn đúng, ngay cả khi bạn viết sai chính tả tên quyền.
Flimm

2
Cũng lưu ý ở đây rằng "can_do_something" là tên của quyền, vì vậy bạn không cần thêm tiền tố "can" vào tên quyền. Ví dụ: perms.my_app.add_object
Karim Sonbol 21/09/18

11

Đã thử nghiệm trên Django 2.0 +

Nếu bạn muốn xem tất cả các quyền mà người dùng đã đăng nhập có, trên mẫu (.html) của bạn, hãy in:

{{ perms.app_name }}

Hoặc là

{{ perms }}

Để kiểm tra xem người dùng có quyền hay không, hãy sử dụng:

{% if perms.app_name.change_model_name_lower_cased %}

Ví dụ :

{% if perms.Utilization.change_invoice %}

Đây: Sử dụng là tên Ứng dụng của tôi. Hóa đơn là một tên kiểu máy.

Lưu ý rằng nói chung, sẽ có 4 loại quyền:

  • thay đổi [Ví dụ: Utilization.change_projectemail]
  • xem [Ví dụ: Utilization.view_invoice]
  • xóa [Ví dụ: Utilization.delete_invoicetype]
  • thêm [Ví dụ: Utilization.add_invoicetype]

Ngoài ra, nếu bạn muốn xem tất cả các quyền mà người dùng có do các nhóm mà anh ta thuộc về, hãy khởi chạy trình bao Django ...

user = User.objects.get(username='somename')
user.get_group_permissions()

Ở đây, tất cả các quyền được liệt kê, là do các nhóm mà anh ta thuộc về.


1
Đúng. Thực sự: viết thường. Không phải solid_cased. Ý tưởng để xem các quyền với {{perms}} thật tuyệt, vì vậy tôi nghĩ đây là câu trả lời tốt nhất.
mirek


0

xin lỗi đã 'khai quật' bài đăng này nhưng tôi gặp sự cố liên quan đến quyền xem bài đăng của tôi: Django: logic không được áp dụng tốt trong mẫu sử dụng quyền (hoán vị

vì Arindam kết hợp rất phù hợp với khái niệm này, tôi hy vọng anh ấy hoặc người khác có thể giúp tôi

các điều khoản không được áp dụng ngay cả khi giá trị là đúng khi tôi tìm kiếm {{perms}} trong mẫu của mình, nó trả về một đối tượng nhưng không phải danh sách các quyền nếu tôi tìm kiếm {{perms.randomization.can_randomize}} thì nó trả về False (hoặc True ) đó là giá trị tốt mà ứng dụng của tôi được đặt tên là ngẫu nhiên hóa và tôi xác định quyền can_randomize trong các mô hình Ngẫu nhiên (sử dụng meta) là một phần của ứng dụng ngẫu nhiên hóa của tôi

Tôi kiểm tra settings.py nhưng tất cả các đường nối đều ổn


Xin chào Slater. Tôi mới thấy điều này hôm nay. Rõ ràng là đã quá muộn. Nhưng nếu bạn muốn giới thiệu ai đó để anh ta nhận được tin nhắn, hãy thêm @Name với tin nhắn trong phần bình luận này.
Arindam Roychowdhury
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.