From 3dab8dd8655173e8df491522c41cdfa9c7bdf091 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 2 Aug 2016 12:16:01 -0300 Subject: [PATCH] Otimizacao do script de inicializacao de grupos e permissoes --- scripts/inicializa_grupos_autorizacoes.py | 94 +++++++++++++++-------- 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/scripts/inicializa_grupos_autorizacoes.py b/scripts/inicializa_grupos_autorizacoes.py index 916e19912..d9d3c2232 100644 --- a/scripts/inicializa_grupos_autorizacoes.py +++ b/scripts/inicializa_grupos_autorizacoes.py @@ -2,53 +2,81 @@ from django.apps import apps from django.contrib.auth.models import Group, Permission, User from django.contrib.contenttypes.models import ContentType -from sapl.settings import SAPL_APPS - - -def cria_grupo_e_usuario_padrao(nome_grupo, nome_usuario, permissoes): - -('Operador de Sessão', ) - def cria_grupos_permissoes(): nomes_apps = ['base', 'parlamentares', 'comissoes', 'materia', 'norma', 'sessao', 'painel'] + permissoes = {app: list(Permission.objects.filter( content_type__in=ContentType.objects.filter(app_label=app))) for app in nomes_apps} # permissoes específicas para protocolo e documento administrativo cts = ContentType.objects.filter(app_label='protocoloadm') + + # documento administrativo permissoes['documento_administrativo'] = list( Permission.objects.filter(content_type__in=cts)) + nome_grupo = 'Operador Administrativo' + grupo = Group.objects.get_or_create(name=nome_grupo)[0] + for p in permissoes['documento_administrativo']: + grupo.permissions.add(p) + + nome_usuario = 'operador_administrativo' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) + # prolocolo administrativo cts = cts.exclude(model__icontains='tramitacao').exclude( model__icontains='documentoadministrativo') permissoes['protocoloadm'] = list( Permission.objects.filter(content_type__in=cts)) - nomes_apps.append('protocoloadm') + nome_grupo = 'Operador de Protocolo Administrativo' + grupo = Group.objects.get_or_create(name=nome_grupo)[0] + for p in permissoes['protocoloadm']: + grupo.permissions.add(p) + + nome_usuario = 'operador_protocoloadm' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) + + # permissoes do base + cts = ContentType.objects.filter(app_label='base') + permissoes['base'] = list( + Permission.objects.filter(content_type__in=cts)) for nome_app in nomes_apps: - if nome_app in {'base', 'parlamentares'}: - # pula apps que não têm grupo específico - continue + if nome_app not in {'base', 'parlamentares'}: + # Elimina casos especificos - nome_grupo = 'Operador de %s' % apps.get_app_config( - nome_app).verbose_name - grupo = Group.objects.get_or_create(name=nome_grupo)[0] + # Cria Grupo + nome_grupo = 'Operador de %s' % apps.get_app_config( + nome_app).verbose_name + grupo = Group.objects.get_or_create(name=nome_grupo)[0] - # configura permissoes do operador - for p in permissoes[nome_app]: - grupo.permissions.add(p) + # Elimina o acesso a proposicoes pelo Operador de Matérias + if nome_app == 'materia': + cts = ContentType.objects.filter( + app_label='materia').exclude(model__icontains='proposicao') + permissoes['materia'] = list( + Permission.objects.filter(content_type__in=cts)) - nome_usuario = 'operador_%s' % nome_app + # Configura as permissoes + for p in permissoes[nome_app]: + grupo.permissions.add(p) - usuario = User.objects.get_or_create(username=nome_usuario)[0] - usuario.set_password('interlegis') - usuario.save() - grupo.user_set.add(usuario) + # Cria o Usuario + nome_usuario = 'operador_%s' % nome_app + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) # Operador Geral grupo_geral = Group.objects.get_or_create(name='Operador Geral')[0] @@ -57,16 +85,20 @@ def cria_grupos_permissoes(): grupo_geral.permissions.add(p) # Autor - # ..... - perms_autor = Permission.objects.get(name='Can add Proposição') - # .... - # Configura Permissoes Autor - op_autor.permissions.add(perms_autor) + perms_autor = [] + perms_autor.append(Permission.objects.get(name='Can add Proposição')) + perms_autor.append(Permission.objects.get(name='Can change Proposição')) + perms_autor.append(Permission.objects.get(name='Can delete Proposição')) - # Configura Permissoes Operador de Administracao - # ..... - for p in perms_docadm: - op_adm.permissions.add(p) + # Configura Permissoes Autor + grupo = Group.objects.get_or_create(name='Autor')[0] + for p in perms_autor: + grupo.permissions.add(p) + nome_usuario = 'operador_autor' + usuario = User.objects.get_or_create(username=nome_usuario)[0] + usuario.set_password('interlegis') + usuario.save() + grupo.user_set.add(usuario) if __name__ == '__main__': cria_grupos_permissoes()