简体   繁体   English

Django 管理应用程序对超级用户 100% 有效,但对于具有完全权限的员工用户,某些应用程序不会为用户显示

[英]Django admin application works 100% for superuser but for staff users with full permissions some apps don't appear for users

My Django admin application works 100% for superuser but for staff users with full permissions some apps like GARAGE don't appear for users even though it has full permissions?我的 Django 管理应用程序对超级用户 100% 有效,但对于具有完全权限的员工用户,即使 GARAGE 等应用程序具有完全权限,它也不会出现在用户面前? How can I debug or where can I be blocking this access in my code?我如何调试或在我的代码中在哪里阻止此访问? I don't use decorator or proxy!我不使用装饰器或代理! I don't use custom template!我不使用自定义模板! I don't have has_perm or has_module_perms in my code我的代码中没有 has_perm 或 has_module_perms

Permissions user all users permissions actived权限用户所有用户权限激活

Admin Site Django Admin dont show App管理员站点Django 管理员不显示应用程序

#settings.py
INSTALLED_APPS = [
    'garagem.apps.GaragemConfig',    
    'ckeditor',
    'covid',
    'documento',    
    'agenda.apps.AgendaConfig', 
    'mailer',    
    'ouvidoria.apps.OuvidoriaConfig',
    'licitacao.apps.LicitacaoConfig',
    'demanda.apps.DemandaConfig',
    'compras.apps.ComprasConfig',
    'procedimento.apps.ProcedimentoConfig',
    'solicitacao.apps.SolicitacaoConfig',
    'endereco.apps.EnderecoConfig',
    'servidor.apps.ServidorConfig',
    'parametros.apps.ParametrosConfig',
    'comunicacao.apps.ComunicacaoConfig',
    'receita.apps.ReceitaConfig',
    'artigo.apps.ArtigoConfig',
    'django.contrib.contenttypes',    
    'django.contrib.admin',
    'django.contrib.auth',    
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',    
    'debug_toolbar',    
    'core',
    'rest_framework',
    'rest_framework.authtoken'
]
​
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
]
​
AUTHENTICATION_BACKENDS = (
 'django.contrib.auth.backends.ModelBackend',
 )
​
#urls.py
​
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from django.views.generic.base import RedirectView
from . import views
from django.views.generic import TemplateView # <--
from django.contrib.auth import views as auth_views
import debug_toolbar
from rest_framework.schemas import get_schema_view
from rest_framework import routers
from servidor.api import viewsets as servidorsiewset
route = routers.DefaultRouter()
route.register(r'servidorapi', servidorsiewset.ServidorViewSet ,basename='servidorapi')
favicon_view = RedirectView.as_view(url='/static/favicon.ico', permanent=True)
urlpatterns = [
    path('garagem/', include('garagem.urls')),    
    path('accounts/', include('django.contrib.auth.urls')),
    path("login/", views.login, name="login"),
    path('', include('solicitacao.urls')),
    path('cartaoverifica', include('solicitacao.urls')),
    path('cartaoimagem', include('solicitacao.urls')),
    path("logout/", auth_views.LogoutView.as_view(), name="logout"),
    path('inscricaoevento', include('solicitacao.urls')),    
    path('compras/protocolo/novo', views.protocolo_new, name='protocolo_new'),
    path('solicitacao/', include('solicitacao.urls')),    
    path('admin/', admin.site.urls),
    path('ouvidoria/', include(('ouvidoria.urls','ouvidoria'),namespace='ouvidoria')),
    path('solicitacao/', include('solicitacao.urls')),
    path('comunicacao/', include('comunicacao.urls')),
    path('receita/', include('receita.urls')),
    path('servidor/', include('servidor.urls')),
    path('procedimento/', include('procedimento.urls')),
    path('compras/', include('compras.urls')),
    path('tinymce/', include('tinymce.urls')),
    path('api/', include(route.urls)),
    path('__debug__/', include(debug_toolbar.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
​
admin.site.site_header = 'Sistema de Gerência de Demandas Internas'
admin.site.site_title = 'Prefeitura Municipal de Taiobeiras - SGDI'
​
​
​
#admin GARAGEM
#admin.py
from servidor.models import Servidor
from django.contrib import admin
from django import forms
from django.contrib import messages
from garagem.models import Veiculo, Retirada
from django.utils.datastructures import MultiValueDictKeyError
from django.core.exceptions import ObjectDoesNotExist
from django.templatetags.static import static
from django.utils.html import format_html
​
class VeiculoAdmin(admin.ModelAdmin):    
    search_fields = ('placa','km')
    list_display = ('placa','modelo', 'km',)
    
​
class RetiradaForm(forms.ModelForm):
    class Meta:        
        model = Retirada
        fields = '__all__'
        
​
class FilterRetiradaAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,{'fields':[('veiculo','motorista'),('dataretirada','km'),('datadevolucao','km_devolucao'),'filtroDeArcondicionado','freioDeEstacionamento','folgaDoPedalDeEmbreagem','buzina',
        'estintorDeIncendio','paraBrisa','luzes','farois','lanternas','portas','filtroDeArDoMotor','correias','mangueiras','cargaDaBateriaVisor',
        'oleoMotor','fluidoDeFreio','fluidoDeArrefecimento','fluidoDeDirecao','fluidoDoLimpadorDoParabrisa','FluidoDeTransmissao','amortecedores',
        'buchas','coifas','sistemaDeEscape','pneus','pressao','freioDianteiro','freioTraseiro','observacoes']})
    ]
    list_display = ('veiculo_motorista_status','km','km_devolucao','km_rodado_dia','dataretirada','datadevolucao')
    list_filter =('motorista__nome','veiculo__placa','dataretirada')
    form = RetiradaForm
    # import pdb; pdb.set_trace() # or print debug statements
    # super(save_formset, self).dispatch(request, form, formset, change)
    def get_form(self, request, obj=None, **kwargs):
        """Override the get_form and extend the 'exclude' keyword arg"""
        form = super(FilterRetiradaAdmin, self).get_form(request, obj, **kwargs)
        try:
            id_carro=request.GET['id_carro']                                
            form.base_fields['veiculo'].initial = Veiculo.objects.get(id=id_carro)
            form.base_fields['km'].initial = Veiculo.objects.get(id=id_carro).km
            if not obj and (request.user.is_superuser is False):         
                form.base_fields['motorista'].initial = Servidor.objects.get(user=request.user)
            else:
                try:
                    # import pdb; pdb.set_trace() # or print debug statements
                    # super(save_formset, self).dispatch(request, form, formset, change)
                    ret=Retirada.objects.filter(veiculo=id_carro).first()
                    if ret:
                        form.base_fields['motorista'].initial = Servidor.objects.get(pk=ret.motorista.id)
                except ObjectDoesNotExist:
                      messages.error(request, 'Motorista não localizado')       
        except MultiValueDictKeyError:
            messages.warning(request, 'Favor usar a câmara para ler o codigo de barras')
        except ObjectDoesNotExist:
            messages.error(request, 'Carro não Localizado')      
        return form
    def save_model(self, request, obj, form, change):
         super(FilterRetiradaAdmin, self).save_model(request, obj, form, change)
         if obj.km_devolucao:
             v=Veiculo.objects.get(id=obj.veiculo.id)
             if v.km < obj.km_devolucao:
                v.km=obj.km_devolucao                
                v.save()
         obj.save()
         messages.warning(request, 'Devolução realizada com Sucesso')
​
    def km_rodado_dia(self, obj):        
        if obj.km_devolucao:
            return (obj.km_devolucao - obj.km)
        else :
            return '-'
    def veiculo_motorista_status(self, obj):        
        # urls = super().get_urls()
        urlsStatic = static('atencao.png')
        if obj.filtroDeArcondicionado != 'OK' or obj.freioDeEstacionamento  != 'OK' or obj.folgaDoPedalDeEmbreagem  != 'OK' or obj.buzina != 'OK' or obj.estintorDeIncendio != 'OK' or obj.paraBrisa != 'OK' or obj.luzes != 'OK' or obj.farois != 'OK' or obj.lanternas != 'OK' or obj.portas != 'OK' or obj.filtroDeArDoMotor != 'OK' or obj.correias != 'OK' or obj.mangueiras != 'OK' or obj.cargaDaBateriaVisor != 'OK' or obj.oleoMotor != 'OK' or obj.fluidoDeFreio != 'OK' or obj.fluidoDeArrefecimento != 'OK' or obj.fluidoDeDirecao != 'OK' or obj.fluidoDoLimpadorDoParabrisa != 'OK' or obj.FluidoDeTransmissao != 'OK' or obj.amortecedores != 'OK' or obj.buchas != 'OK' or obj.coifas != 'OK' or obj.sistemaDeEscape != 'OK' or obj.pneus != 'OK' or obj.pressao != 'OK' or obj.freioDianteiro != 'OK' or obj.freioTraseiro != 'OK':
​
            return format_html('<p>{}/{}<img src="{}" alt="Italian Trulli"></p>',obj.motorista,str(obj.veiculo).upper(),urlsStatic)
        else :
            return format_html('<p>{}/{}</p>',obj.motorista,str(obj.veiculo).upper())
    veiculo_motorista_status.short_description = 'Veiculo / Motorista  '     
​
class RetiradaAdmin(FilterRetiradaAdmin):
​
    autocomplete_fields = ['motorista','veiculo'] #Coloca a pesquisa 
    search_fields = ('motorista__nome','veiculo__placa')
​
admin.site.register(Retirada, RetiradaAdmin)
​
admin.site.register(Veiculo, VeiculoAdmin)
 
 
​
#garagem apps.py
from django.apps import AppConfig
​
​
class GaragemConfig(AppConfig):
    name = 'garagem'

In Django==3.2.13, creating migrations and migrating them made the app permissions visible in django admin.在 Django==3.2.13 中,创建迁移并迁移它们使应用权限在 django 管理员中可见。 And I added the permissions to is_staff users.我将权限添加到 is_staff 用户。 This solved my problem.这解决了我的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM