Как определить разрешения в Django без статуса персонала?

Я хотел бы дать разрешения определенным пользователям на создание статей, не присваивая им статус персонала.

Причина в том, что я не хочу, чтобы какой-либо пользователь заходил в панель администратора для аутентификации, как это происходит, когда кто-то добавляет @staff_member_required в представление. Вместо этого я просто хочу добавить ссылку /add/article в профиль пользователей, у которых есть такое разрешение.

Как я могу этого добиться?


person Jand    schedule 06.02.2015    source источник


Ответы (1)


Если вы используете традиционные функциональные представления, вы можете сделать что-то вроде этого:

def add_article(request):
    if not request.user.has_perm('articles.add_article'):
        return HttpResponseForbidden()
    # Now only users that have the permission will reach this 
    # so add your normal view handling

Однако предлагаю вместо вышеперечисленного использовать декоратор django.contrib.auth.decorators.permission_required:

@permission_required('articles.add_article')
def add_article(request):
    # your normal view handling

Если вместо этого вы используете CBV, вам следует либо украсить метод as_view() вашего CBV (в вашем urls.py), либо использовать PermissionRequiredMixin из django-braces (http://django-braces.readthedocs.org/en/last/access.html#permissionrequiredmixin) или просто выполните свои собственные проверки в dispatch() метод ЦБВ.

Кроме того, в вашем шаблоне поместите URL-адрес add_article внутри проверки разрешений, например:

{% if perms.articles.add_article %}
     Show url for article editing only to users that have the rpmission
{% endif %}
person Serafeim    schedule 06.02.2015
comment
Я использую переходные функциональные представления. Большая помощь. Спасибо Серафим. - person Jand; 06.02.2015