Browse Source

trata comportamento dos docs adms

pull/2465/head
Leandro Roberto 6 years ago
parent
commit
6d7660106c
  1. 3
      sapl/api/serializers.py
  2. 40
      sapl/api/views.py
  3. 15
      sapl/base/models.py

3
sapl/api/serializers.py

@ -30,6 +30,9 @@ class ModelChoiceObjectRelatedField(serializers.RelatedField):
class AutorSerializer(serializers.ModelSerializer): class AutorSerializer(serializers.ModelSerializer):
# AutorSerializer sendo utilizado pelo gerador automático da api devidos aos
# critérios anotados em views.py
autor_related = ModelChoiceObjectRelatedField(read_only=True) autor_related = ModelChoiceObjectRelatedField(read_only=True)
class Meta: class Meta:

40
sapl/api/views.py

@ -13,13 +13,12 @@ from django_filters.rest_framework.backends import DjangoFilterBackend
from django_filters.rest_framework.filterset import FilterSet from django_filters.rest_framework.filterset import FilterSet
from django_filters.utils import resolve_field from django_filters.utils import resolve_field
from rest_framework import serializers as rest_serializers from rest_framework import serializers as rest_serializers
from rest_framework.decorators import list_route, detail_route, action from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from sapl.api.permissions import SaplModelPermissions from sapl.api.permissions import SaplModelPermissions
from sapl.base.models import Autor from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO
from sapl.comissoes.models import Comissao
from sapl.materia.models import Proposicao from sapl.materia.models import Proposicao
from sapl.parlamentares.models import Parlamentar from sapl.parlamentares.models import Parlamentar
from sapl.utils import models_with_gr_for_model from sapl.utils import models_with_gr_for_model
@ -361,6 +360,41 @@ class _ProposicaoViewSet(SaplSetViews['materia']['proposicao']):
return qs return qs
class _DocumentoAdministrativoViewSet(SaplSetViews['protocoloadm']['documentoadministrativo']):
class DocumentoAdministrativoPermission(SaplModelPermissions):
def has_permission(self, request, view):
if request.method == 'GET':
comportamento = AppConfig.attr('documentos_administrativos')
if comportamento == DOC_ADM_OSTENSIVO:
return True
"""
Diante da lógica implementada na manutenção de documentos
administrativos:
- Se o comportamento é doc adm ostensivo, deve passar pelo
teste de permissões sem avaliá-las
- se o comportamento é doc adm restritivo, deve passar pelo
teste de permissões avaliando-as
"""
return super().has_permission(request, view)
permission_classes = (DocumentoAdministrativoPermission, )
def get_queryset(self):
"""
mesmo tendo passado pelo teste de permissões, deve ser filtrado,
pelo campo restrito. Sendo este igual a True, disponibilizar apenas
a um usuário conectado. Apenas isso, sem critérios outros de permissão,
conforme implementado em DocumentoAdministrativoCrud
"""
qs = super().get_queryset()
if self.request.user.is_anonymous():
qs = qs.exclude(restrito=True)
return qs
SaplSetViews['base']['autor'] = _AutorViewSet.build_class_with_actions() SaplSetViews['base']['autor'] = _AutorViewSet.build_class_with_actions()
SaplSetViews['materia']['proposicao'] = _ProposicaoViewSet SaplSetViews['materia']['proposicao'] = _ProposicaoViewSet
SaplSetViews['parlamentares']['parlamentar'] = _ParlamentarViewSet SaplSetViews['parlamentares']['parlamentar'] = _ParlamentarViewSet
SaplSetViews['protocoloadm']['documentoadministrativo'] = _DocumentoAdministrativoViewSet

15
sapl/base/models.py

@ -1,16 +1,19 @@
import reversion
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.db.models.signals import post_migrate from django.db.models.signals import post_migrate
from django.db.utils import DEFAULT_DB_ALIAS from django.db.utils import DEFAULT_DB_ALIAS
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
#from model_utils import Choices import reversion
from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES, from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES,
get_settings_auth_user_model, models_with_gr_for_model) get_settings_auth_user_model, models_with_gr_for_model)
TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensiva')), DOC_ADM_OSTENSIVO = 'O'
('R', _('Restritiva'))) DOC_ADM_RESTRITIVO = 'R'
TIPO_DOCUMENTO_ADMINISTRATIVO = ((DOC_ADM_OSTENSIVO, _('Ostensiva')),
(DOC_ADM_RESTRITIVO, _('Restritiva')))
RELATORIO_ATOS_ACESSADOS = (('S', _('Sim')), RELATORIO_ATOS_ACESSADOS = (('S', _('Sim')),
('N', _('Não'))) ('N', _('Não')))
@ -22,7 +25,7 @@ SEQUENCIA_NUMERACAO = (('A', _('Sequencial por ano')),
ESFERA_FEDERACAO_CHOICES = (('M', _('Municipal')), ESFERA_FEDERACAO_CHOICES = (('M', _('Municipal')),
('E', _('Estadual')), ('E', _('Estadual')),
('F', _('Federal')), ('F', _('Federal')),
) )
ASSINATURA_ATA_CHOICES = ( ASSINATURA_ATA_CHOICES = (
('M', _('Mesa Diretora da Sessão')), ('M', _('Mesa Diretora da Sessão')),
@ -100,7 +103,7 @@ class AppConfig(models.Model):
esfera_federacao = models.CharField( esfera_federacao = models.CharField(
max_length=1, max_length=1,
blank=True, blank=True,
default = "", default="",
verbose_name=_('Esfera Federação'), verbose_name=_('Esfera Federação'),
choices=ESFERA_FEDERACAO_CHOICES) choices=ESFERA_FEDERACAO_CHOICES)

Loading…
Cancel
Save