2015-10-27 4 views
1

Я строю веб-приложение Django, в котором у меня есть две роли, например, sys_user и exhibitor. Когда sys_user логины в он имеет доступ ко всем URL-адресов и модулей приложений но exhibitor будет иметь ограниченный доступ т.е. он будет иметь доступ к определенным URL-адресов и модулей приложений. Рассмотрим следующий пример:Ограниченный доступ к различным ролям в Django

Когда sys_user журналы в он должен увидеть (далее врезку) и иметь доступ ко всем модулям, как:

--- Module1 
--- Module2 
--- Module3 
--- Module4 

Когда exhibitor журналы он должен видеть (далее врезку) и имеет доступ только к следующим модулям, как:

--- Module1 
--- Module2 

Теперь я знаю, что Django предоставляет свои собственные права, но я не знаю, как они вписываются в мою ситуацию или есть любой другой альтернативный подход для этого. Пожалуйста, укажите мне в правильном направлении. Благодаря

+0

Где должен этот доступ быть размещены на? на уровне шаблонов, просмотр? – wolendranh

+0

Любой, где будет работать до тех пор, как экспонент не может непосредственно получить доступ к ограниченным модулям непосредственно из URLs – Sibtain

ответ

0

Если вы хотите сделать это на уровне разрешений шаблона хранятся в {{ perm }} переменной.

С Django документы:

{% if perms.foo %} 
    <p>You have permission to do something in the foo app.</p> 
    {% if perms.foo.can_vote %} 
     <p>You can vote!</p> 
    {% endif %} 
    {% if perms.foo.can_drive %} 
     <p>You can drive!</p> 
    {% endif %} 
{% else %} 
    <p>You don't have permission to do anything in the foo app.</p> 
{% endif %} 

Более подробную информацию можно найти here.

Также можно сделать на уровне URL:

from django.contrib.auth.decorators import login_required 
from django.views.generic.simple import direct_to_template 
urlpatterns = patterns('', 
    (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}), 
    ) 

В этом примере login_required декоратор используется. Но вы можете создать свой собственный декоратор, где вы будете проверять пользователя в объекте запроса и на его основе, принимать решение о том, что делать (перенаправление, запрещенная страница и т. Д.)

Here - исчерпывающий пример использования декораторов в Django.

Простой пример пользовательского декоратора:

from django.contrib.auth.decorators import login_required, user_passes_test 

@login_required 
@user_passes_test(lambda u: u.user_name != 'sys_user', login_url='/myapp/denied/') 
def some_view(request): 
+0

Каких права я должен добавить и где (в views.py) для моего конкретного случая? – Sibtain

+0

@Sibtain Вы можете предоставить sys_user с правами администратора и проверьте в виде, если request.user.is_superuser и делать некоторые вещи, специфичные для пользователя с правами администратора. – wolendranh

+0

Хорошо. Если я использую подход уровня шаблона, он также избегает прямой навигации по url для ограниченных URL-адресов? – Sibtain

Смежные вопросы