Как определить права доступа в Django без статуса персонала?
Я хотел бы дать разрешения некоторым пользователям на создание статей, не присваивая им статус сотрудников.
Причина в том, что я не хочу, чтобы какой-либо пользователь достигал панели администратора для аутентификации, как это происходит, когда кто-то добавляет @staff_member_required
в представление. Вместо этого я просто хочу добавить ссылку /add/article
в профиль пользователей, которые имеют такое разрешение.
Как я могу этого достичь?
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 %}