2012-08-11 35 views
25

Làm cách nào để phát hiện, từ chế độ xem hoặc tệp mẫu, nếu người dùng quản trị của tôi đăng nhập hay không? Ví dụ, sử dụng trường hợp cho trang web của tôi:Django: phát hiện đăng nhập quản trị viên ở chế độ xem hoặc mẫu

  1. tài khoản mở /admin/, nhập thông tin đúng
  2. Sau đó, người dùng mở một số trang, ví dụ /page/ và có "Add" và "Xóa" nút
  3. tài khoản mở /admin/ và bấm vào nút "Đăng xuất"
  4. /page/ -> không có "Add" và "Xóa" nút

phiên bản Django 1,4

+1

Vui lòng đặt nhận xét phù hợp làm giải pháp! – erikbwork

Trả lời

10

Câu trả lời của Joseph là tốt cho trường hợp đơn giản của bạn, nhưng trên thực tế không phải is_staff cũng không phải is_superuser là hoàn toàn phù hợp. Giả sử trang của bạn là, ví dụ: /polls/ (danh sách các đối tượng Poll, trong một ứng dụng được gọi là poll), bạn nên kiểm tra poll.change_pollpoll.delete_pollpermissions cụ thể.

Trong một mẫu:

{% for poll in polls %} 
    {% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %} 
    {% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %} 
{% endfor %} 

Hoặc trong một cái nhìn using has_perm:

if not request.user.has_perm('poll.change_poll'): 
    return HttpResponseForbidden('Nope!') 

Hoặc trong một cái nhìn using a decorator:

@permission_required('poll.change_poll') 
def edit_poll(request, poll_id): 
    # .... 

Bạn có thể gán các quyền trực tiếp cho người sử dụng , cho một nhóm (và sau đó đặt người dùng vào nhóm đó) hoặc bằng cách đặt is_superuser.

56

Trong mẫu:

{% if user.is_superuser %} 
    <p>Hello, admin.</p> 
{% else %} 
    <p>Hello, ordinary visitor.</p> 
{% endif %} 

Trong lần xem:

if request.user.is_superuser: 
    # Hello, admin. 
else: 
    # Hello, ordinary visitor. 

Tùy thuộc vào nhu cầu của bạn, is_staff có thể là một phù hợp tốt hơn so với is_superuser. Bạn có thể đọc về sự khác biệt here.

Các vấn đề liên quan