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


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

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

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

1 2

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

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

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

{% if perms.articles.add_article %}
     Show url for article editing only to users that have the rpmission
{% endif %}