Permissões¶
O plugin usa as permissões padrão do Django para o modelo TaskLog mais
uma permissão customizada:
Permissão |
Origem |
Controla |
|---|---|---|
|
Padrão do Django (qualquer modelo ganha automaticamente) |
Acesso ao changelist/detail do |
|
Padrão do Django |
Reservada para uso futuro (ex.: reprocessar tarefas diretamente do |
|
Padrão do Django |
Exclusão de registros de |
|
Customizada ( |
Ver o stacktrace completo de uma tarefa que falhou (no |
Como funciona view_task_trace¶
- django_celery_task_monitor.permissions.user_can_view_task_trace(user: Any) bool[código-fonte]
Retorna
Trueseuserpode ver o stacktrace completo de uma tarefa.Superusuários sempre podem. Usuários anônimos (ou
None) nunca podem. Demais usuários precisam da permissão configurada emdjango_celery_task_monitor.settings.TASK_TRACE_PERMISSION.useraceita tanto umAbstractBaseUserautenticado quanto umAnonymousUser/None, por isso o tipo é deliberadamente duck-typed (has_permexiste em ambos, mas com bases distintas no Django).
Em resumo:
Superusuários sempre veem o stacktrace completo.
Usuários com a permissão ``view_task_trace`` também veem.
Demais usuários autenticados veem apenas a mensagem amigável configurada em
CELERY_TASK_MONITOR_FRIENDLY_ERROR_MESSAGE(ver Configuração).Usuários anônimos (
None/AnonymousUser) nunca veem nada além da mensagem amigável.
Onde isso é aplicado¶
TaskLog.get_error_details(user)— usado pelo payload JSON do endpoint de polling (campoerror) e peloTaskLogAdmin.TaskLogAdmin.get_fields()— remove o campofull_tracebackdo formulário inteiro para quem não tem a permissão, em vez de só ocultar visualmente (o HTML nunca chega a ser gerado para esse usuário).
Concedendo a permissão¶
Como qualquer permissão do Django, pode ser concedida via admin
(Usuários → escolher usuário → Permissões de usuário) ou por script:
from django.contrib.auth.models import Permission
permission = Permission.objects.get(
content_type__app_label="django_celery_task_monitor",
codename="view_task_trace",
)
usuario.user_permissions.add(permission)