Мне нужно разрешить администраторам управлять разрешениями для моделей на моем сайте. Группы, пользователи и разрешения отлично справляются с этим прямо сейчас. Однако мне также необходимо разрешить администраторам управлять разрешениями пользователей, не прошедших проверку подлинности, - анонимных пользователей. Документы говорят, что группа анонимного пользователя всегда пуста, поэтому как я могу разрешить администрирование своих прав?Django - Анонимная группа пользователей
ответ
Странно добавлять разрешения для анонимных пользователей. Docs сказать: основа разрешения
Джанго не имеет места для хранения разрешений для анонимных пользователей. Тем не менее, у него есть основание, что позволяет настраивать аутентификационные базы для авторизации для анонимных пользователей. Это особенно полезно для авторов повторно используемых приложений, которые могут делегировать все вопросы авторизации на бэкэнд auth , а не на необходимость настроек, например, для управления анонимным доступом .
Таким образом, вы можете установить разрешения для anon yuser, но с пользовательским auth backend. Иногда лучше использовать декларативную проверку прав доступа, используя декоратор на взглядах с необходимыми разрешениями, например: (. Включая анонимный пользователь)
@permission_required('somemodel.can_add')
def add_model(request):
или оставить его без ограничений для всех. Или некоторые пользовательские разрешения проверка ..
Или, если вы хотите иметь права доступа в любом случае, вы всегда можете создать фиктивный пользователь, скажем, «AnonUser», чтобы дать ему разрешения, а затем проверять права доступа, чтобы иметь что-то вроде:
if not user.is_authenticated():
dummy_user = User.objects.get(name="AnonUser")
if dummy_user.has_perm("somepermission"):
# bla bla bla
, но это то, что я никогда бы не использовать ..
Я пошел с пользовательским сервером для обеспечения анонимной группы (как @Tisho suggests), который может быть легко отредактирован с помощью интерфейса администратора. Добавьте следующий класс в AUTHENTICATION_BACKENDS
в settings.py
(например, 'appname.auth_backend.AnonymousPermissions'
).
Обратите внимание, что для проверки разрешений обычно требуется вход в систему перед регистрацией (например, с помощью login_required
), которая должна быть заменена только проверками разрешений.
from django.contrib.auth.models import Group
class AnonymousPermissions(object):
def get_anonymous_permissions(self):
#largely from django.contrib.auth.backends
group, group_created = Group.objects.get_or_create(name='Anonymous')
perms = group.permissions.all()
perms = perms.values_list('content_type__app_label', 'codename').order_by()
perms = set("%s.%s" % (ct, name) for ct, name in perms)
return perms
def get_group_permissions(self, user_obj, obj=None):
if user_obj.is_anonymous:
perm_cache_name = '_anonymous_perm_cache'
if not hasattr(user_obj, perm_cache_name):
setattr(user_obj, perm_cache_name, self.get_anonymous_permissions())
return getattr(user_obj, perm_cache_name)
return set()
def get_all_permissions(self, user_obj, obj=None):
return self.get_group_permissions(user_obj, obj)
def has_perm(self, user_obj, perm, obj=None):
return perm in self.get_group_permissions(user_obj, obj)
- 1. Django: Группа?
- 2. группа django по шаблону
- 3. Группа Django ORM
- 4. Группа пользователей firebase
- 5. Tableau - Очистить всех пользователей Группа
- 6. Joomla 3.2 Гостевая группа пользователей
- 7. Wordpress: дважды печатается группа пользователей
- 8. CKAN 2-уровневая группа пользователей
- 9. Что такое группа пользователей Odoo?
- 10. Проверьте, существует ли группа пользователей
- 11. группа в django агрегатная функция?
- 12. Группа в Django?
- 13. Django: Плохая группа имя
- 14. Группа Django ORM
- 15. MOSS 2007 Анонимная публикация
- 16. Выпадающая группа в Django Model
- 17. Django: Группа запросов по месяцам
- 18. Группа ManyToMany в Django admin
- 19. Django Пользовательская группа «для каждого проекта»
- 20. указанная группа пользователей SQLServerMSSQLUSer не существует
- 21. (Py) Spark - группа пользователей за время времени
- 22. группа пользователей по сообщениям отправлено последним
- 23. Группа пользователей публикаций и подписчиков Meteor
- 24. Права на страницы, группа пользователей ROR
- 25. MySQL - Группа пользователей База на весь продукт
- 26. asp.net группа пользователей отсутствует iis 7.5
- 27. Facebook Закрытая группа пользователей для App
- 28. группа пользователей liferay экспорта в OpenLDAP
- 29. Джанго группа пользователей из запроса пользователя
- 30. Добавить пользователя по умолчанию Группа пользователей
Подход, основанный на подходе, может быть моим единственным вариантом, учитывая, что мне нужно, чтобы администраторы управляли анонсами от администратора. Это действительно неприятно, хотя ... – guywhoneedsahand
Тогда, вероятно, лучше реализовать простой сервер аутентификации и заставить пользователей анонимных пользователей регистрироваться с помощью фиктивного пользователя. И вообще отключить анонимного пользователя. – Tisho
Перфорирование вы можете назначить фиктивного пользователя в классе промежуточного программного обеспечения? – blaze