У меня есть активный проект Django, где панель администратора используется командой поддержки клиентов. Django не имеет разрешения view
, из-за которого я должен назначить разрешение на изменение для группы поддержки клиентов, которая немного опасна. У меня есть некоторые модели, для которых команде поддержки клиентов нужен только доступ к виду, а не доступ к изменениям из-за проблем с безопасностью. Почему в Django отсутствует разрешение view
? Любой обходной путь к этому?Почему у Django нет разрешения на просмотр?
3
A
ответ
1
Я думаю, что это должно работать:
1.Add "вид" разрешение см https://stackoverflow.com/a/23411901/1266258
2.Customize "изменение" разрешение:
class FooAdmin(ModelAdmin):
def has_change_permission(self, request, obj=None):
# user can view the change list
if not obj and request.user.has_perm('myapp.view_foo'):
return True
# user can view the change form and change the obj
return request.user.has_perm('myapp.change_foo')
4
Вот обходной путь.
Модели
Просто создавать модели с разрешением зрения, унаследовав их от Mixin:
class ViewPermissionsMixin(models.Model):
"""
Mixin adds view permission to model.
"""
class Meta:
abstract=True
default_permissions = ('add', 'change', 'delete', 'view')
Пример модели:
class ExampleModel(ViewPermissionsMixin):
name = models.CharField(max_length=255)
class Meta(ViewPermissionsMixin.Meta):
abstract = False
Это добавит разрешение представления, которое может быть назначено определенный пользователь/группа. Но такое разрешение бесполезно без правильной модификации администратора.
Админы
Вот подмешать для админ:
class AdminViewMixin(admin.ModelAdmin):
def has_perm(self,user,permission):
"""
Usefull shortcut for `user.has_perm()`
"""
if user.has_perm("%s.%s_%s" % (self.model._meta.app_label,permission,self.model.__name__.lower(),)):
return True
return False
def has_module_permission(self, request): # Django 1.8
pass
def has_change_permission(self, request, obj=None):
"""
Necessary permission check to let Django show change_form for `view` permissions
"""
if request.user.is_superuser:
return True
elif self.has_perm(request.user,'change'):
return True
elif self.has_perm(request.user,'view'):
return True
return super(AdminMixin, self).has_change_permission(request, obj)
def get_readonly_fields(self, request, obj=None):
"""
Turn each model field into read-only for `viewers`
"""
all_model_fields = []
for field in self.model._meta.fields:
# TODO in Django 1.8 use ModelAdmin.get_fields()
if not field.auto_created \
and (not hasattr(field,'auto_now_add') or not field.auto_now_add) \
and (not hasattr(field,'auto_now') or not field.auto_now) \
:
all_model_fields.append(field.name)
if request.user.is_superuser:
return self.readonly_fields
elif self.has_perm(request.user,'change'):
return self.readonly_fields
elif self.has_perm(request.user,'view'):
return all_model_fields
return self.readonly_fields
def change_view(self, request, object_id, extra_context=None):
"""
Disable buttons for `viewers` in `change_view`
"""
if request.user.is_superuser:
pass
elif self.has_perm(request.user,'change'):
pass
elif self.has_perm(request.user,'view'):
extra_context = extra_context or {}
extra_context['hide_save_buttons'] = True
return super(AdminViewMixin, self).change_view(request, object_id, extra_context=extra_context)
Пример администратор:
@admin.register(models.ExampleModel)
class ExampleAdmin(AdminViewMixin):
list_display = ('name',)
pass
Наконец просто назначить view
разрешения для конкретных моделей для любого пользователя или группы в вашем Администратор Django.
Смежные вопросы
- 1. У вас нет разрешения на просмотр сервера?
- 2. Почему у меня нет разрешения на установку psycopg2 в virtualenv
- 3. У вас нет разрешения
- 4. У вас нет разрешения на использование copyTo
- 5. У проверки наличия у пользователя разрешения на просмотр страницы
- 6. У пользователя нет разрешения на метод CreateEnvelopeFromTemplates
- 7. У вас нет разрешения на запуск эмулятора
- 8. У вас нет разрешения на доступ/Magento/
- 9. Скрыть действие в django admin, если у них нет разрешения
- 10. django admin - У вас нет разрешения редактировать что-либо
- 11. Django. У вас нет разрешения редактировать что-либо
- 12. Проверка наличия у пользователя разрешения на просмотр для папки
- 13. Liferay Разрешения на просмотр
- 14. У вас нет разрешения называть showModalDialog
- 15. apache403 запрещен У вас нет разрешения на доступ к
- 16. У вас нет разрешения на просмотр этой директории или ошибки страницы на azure с php + mySql
- 17. «У вас нет разрешения на просмотр этого каталога или страницы». на IIS7.5 с ASP.NET MVC4
- 18. Файл «" не может быть открыт, потому что у вас нет разрешения на его просмотр
- 19. Ошибка при построении проекта xcode говорит: «у вас нет разрешения»
- 20. Какие функции у Django у Pylons нет?
- 21. у моего приложения нет разрешения xcode 7
- 22. Почему у клиентов нет?
- 23. Apache - У вас нет разрешения на доступ/на этом сервере
- 24. Android: у вас нет разрешения на запись данных на SDCard
- 25. У вас нет разрешения на доступ к файлу на сервере
- 26. Как узнать, сколько параметров принимает сценарий bash. У меня нет разрешения на просмотр/редактирование сценария
- 27. 403 - Запрещено: у вас нет разрешения на просмотр с использованием учетных данных, которые вы предоставили
- 28. У вас нет разрешения на просмотр этого каталога или страницы Azure Dropbox
- 29. Xamarin.Forms Azure Push Notifications - «MobileServiceInvalidOperationException: у вас нет разрешения на просмотр этого каталога или страницы»
- 30. JIRA REST API для получения рабочего журнала - «У вас нет разрешения на просмотр указанной проблемы»
Вы хотите, чтобы информация в admin была доступна только для чтения? –
@marksweb: Да, но только для определенной группы пользователей. Я не хочу, чтобы он читался только глобально по всем группам. – anon
Никто не отвечал на вопрос, почему отсутствует разрешение 'view'. – mehmet