mirror of https://github.com/interlegis/sapl.git
Eduardo Calil
8 years ago
16 changed files with 383 additions and 421 deletions
@ -1,45 +1,23 @@ |
|||||
language: python |
language: python |
||||
sudo: required |
|
||||
|
|
||||
python: |
python: |
||||
- "3.4.3" |
- 3.4.3 |
||||
|
|
||||
|
|
||||
services: |
services: |
||||
- postgresql |
- postgresql |
||||
|
|
||||
addons: |
|
||||
postgresql: "9.3" |
|
||||
|
|
||||
install: |
install: |
||||
- sudo apt-get install git nginx python3-dev libpq-dev graphviz-dev graphviz pkg-config python-psycopg2 nodejs npm |
|
||||
- sudo ln -s /usr/bin/node |
|
||||
- pip install -r requirements/test-requirements.txt |
- pip install -r requirements/test-requirements.txt |
||||
- pip install --upgrade setuptools |
|
||||
|
|
||||
# Line 24 to 35 is a hack found in this link below |
|
||||
# It was used to fix an error in database building |
|
||||
# https://dockyard.com/blog/ruby/2013/03/29/running-postgresql-9-2-on-travis-ci |
|
||||
|
|
||||
before_script: |
before_script: |
||||
- sudo /etc/init.d/postgresql stop |
|
||||
- sudo cp /etc/postgresql/9.2/main/pg_hba.conf ./ |
|
||||
- sudo apt-get remove postgresql postgresql-9.2 -qq --purge |
|
||||
- source /etc/lsb-release |
|
||||
- echo "deb http://apt.postgresql.org/pub/repos/apt/ $DISTRIB_CODENAME-pgdg main" > pgdg.list |
|
||||
- sudo mv pgdg.list /etc/apt/sources.list.d/ |
|
||||
- wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - |
|
||||
- sudo apt-get update |
|
||||
- sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" install postgresql-9.3 postgresql-contrib-9.3 -qq |
|
||||
- sudo /etc/init.d/postgresql stop |
|
||||
- sudo cp ./pg_hba.conf /etc/postgresql/9.3/main |
|
||||
- sudo /etc/init.d/postgresql start |
|
||||
- npm install -g bower |
- npm install -g bower |
||||
- cp .env_dev .env |
- cp sapl/.env_test sapl/.env |
||||
- sed -i -e 's/getpass.getuser()/"postgres"/g' sapl/settings.py |
- psql -c "CREATE USER sapl WITH PASSWORD 'sapl'" -U postgres; |
||||
- psql -c 'create database sapl;' -U postgres |
- psql -c "CREATE DATABASE sapl OWNER sapl;" -U postgres |
||||
|
|
||||
script: |
script: |
||||
- ./manage.py migrate |
- ./manage.py migrate |
||||
- ./manage.py bower install |
- ./manage.py bower install |
||||
- pip freeze |
- py.test |
||||
- ./test_and_check_qa.sh |
# - ./test_and_check_qa.sh |
@ -1,188 +1,114 @@ |
|||||
|
from django.apps import apps |
||||
from django.contrib.auth.models import Group, Permission, User |
from django.contrib.auth.models import Group, Permission, User |
||||
from django.contrib.contenttypes.models import ContentType |
from django.contrib.contenttypes.models import ContentType |
||||
|
|
||||
|
|
||||
def cria_grupos_permissoes(): |
def cria_ou_reseta_grupo(nome): |
||||
|
grupo = Group.objects.get_or_create(name=nome)[0] |
||||
if not Group.objects.filter("Teste"): |
for p in list(grupo.permissions.all()): |
||||
pass |
grupo.permissions.remove(p) |
||||
|
return grupo |
||||
# Cria todos os grupos necessários para a aplicação |
|
||||
|
|
||||
op_geral = Group.objects.get_or_create(name="Operador Geral") |
|
||||
op_prot = Group.objects.get_or_create(name="Operador de Protocolo") |
|
||||
op_sessao = Group.objects.get_or_create(name="Operador de Sessão") |
|
||||
op_comissao = Group.objects.get_or_create(name="Operador de Comissão") |
|
||||
op_adm = Group.objects.get_or_create(name="Operador de Administração") |
|
||||
op_norma = Group.objects.get_or_create(name="Operador de Norma Jurídica") |
|
||||
op_materia = Group.objects.get_or_create( |
|
||||
name="Operador de Matéria Legislativa") |
|
||||
op_painel = Group.objects.get_or_create(name="Operador de Painel") |
|
||||
op_autor = Group.objects.get_or_create(name="Autor") |
|
||||
|
|
||||
op_geral = op_geral[0] |
|
||||
op_prot = op_prot[0] |
|
||||
op_sessao = op_sessao[0] |
|
||||
op_comissao = op_comissao[0] |
|
||||
op_adm = op_adm[0] |
|
||||
op_norma = op_norma[0] |
|
||||
op_materia = op_materia[0] |
|
||||
op_painel = op_painel[0] |
|
||||
op_autor = op_autor[0] |
|
||||
|
|
||||
# Base |
|
||||
|
|
||||
permissao_add_cl = Permission.objects.get( |
|
||||
name="Can add Casa Legislativa") |
|
||||
permissao_edit_cl = Permission.objects.get( |
|
||||
name="Can change Casa Legislativa") |
|
||||
permissao_remove_cl = Permission.objects.get( |
|
||||
name="Can delete Casa Legislativa") |
|
||||
|
|
||||
permissoes_base = [permissao_add_cl, |
|
||||
permissao_edit_cl, |
|
||||
permissao_remove_cl] |
|
||||
|
|
||||
# Comissao |
|
||||
|
|
||||
cts = ContentType.objects.filter(app_label='comissoes') |
def cria_usuario(nome, grupo): |
||||
perms_comissoes = list(Permission.objects.filter(content_type__in=cts)) |
nome_usuario = nome |
||||
|
usuario = User.objects.get_or_create(username=nome_usuario)[0] |
||||
|
usuario.set_password('interlegis') |
||||
|
usuario.save() |
||||
|
grupo.user_set.add(usuario) |
||||
|
|
||||
# Materia |
|
||||
|
|
||||
cts = ContentType.objects.filter(app_label='materia') |
def cria_grupos_permissoes(): |
||||
perms_materia = list(Permission.objects.filter(content_type__in=cts)) |
|
||||
|
|
||||
# Norma |
|
||||
|
|
||||
cts = ContentType.objects.filter(app_label='norma') |
|
||||
perms_norma = list(Permission.objects.filter(content_type__in=cts)) |
|
||||
|
|
||||
# Painel |
|
||||
|
|
||||
cts = ContentType.objects.filter(app_label='painel') |
|
||||
perms_painel = list(Permission.objects.filter(content_type__in=cts)) |
|
||||
|
|
||||
# Parlamentares |
|
||||
|
|
||||
cts = ContentType.objects.filter(app_label='parlamentares') |
nomes_apps = ['base', 'parlamentares', 'comissoes', |
||||
perms_parlamentares = list(Permission.objects.filter(content_type__in=cts)) |
'materia', 'norma', 'sessao', 'painel'] |
||||
|
|
||||
# ProtocoloADM e DOCADM |
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') |
cts = ContentType.objects.filter(app_label='protocoloadm') |
||||
|
|
||||
perms_docadm = list(Permission.objects.filter(content_type__in=cts)) |
# documento administrativo |
||||
|
permissoes['documento_administrativo'] = list( |
||||
cts_exc1 = cts.filter(model__icontains='tramitacao') |
Permission.objects.filter(content_type__in=cts)) |
||||
cts_exc2 = cts.filter(model__icontains='documentoadministrativo') |
nome_grupo = 'Operador Administrativo' |
||||
|
grupo = cria_ou_reseta_grupo(nome_grupo) |
||||
cts = cts.exclude(id__in=[o.id for o in cts_exc1]) |
for p in permissoes['documento_administrativo']: |
||||
cts = cts.exclude(id__in=[o.id for o in cts_exc2]) |
grupo.permissions.add(p) |
||||
|
|
||||
perms_protocoloadm = list(Permission.objects.filter(content_type__in=cts)) |
nome_usuario = 'operador_administrativo' |
||||
|
cria_usuario(nome_usuario, grupo) |
||||
# Sessao |
|
||||
|
# prolocolo administrativo |
||||
cts = ContentType.objects.filter(app_label='sessao') |
cts = cts.exclude(model__icontains='tramitacao').exclude( |
||||
perms_sessao = list(Permission.objects.filter(content_type__in=cts)) |
model__icontains='documentoadministrativo') |
||||
|
permissoes['protocoloadm'] = list( |
||||
# Painel |
Permission.objects.filter(content_type__in=cts)) |
||||
|
nome_grupo = 'Operador de Protocolo Administrativo' |
||||
cts = ContentType.objects.filter(app_label='painel') |
grupo = cria_ou_reseta_grupo(nome_grupo) |
||||
perms_painel = list(Permission.objects.filter(content_type__in=cts)) |
for p in permissoes['protocoloadm']: |
||||
|
grupo.permissions.add(p) |
||||
|
|
||||
|
nome_usuario = 'operador_protocoloadm' |
||||
|
cria_usuario(nome_usuario, grupo) |
||||
|
|
||||
|
# 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 not in {'base', 'parlamentares'}: |
||||
|
# Elimina casos especificos |
||||
|
|
||||
|
# Cria Grupo |
||||
|
nome_grupo = 'Operador de %s' % apps.get_app_config( |
||||
|
nome_app).verbose_name |
||||
|
grupo = cria_ou_reseta_grupo(nome_grupo) |
||||
|
|
||||
|
# Elimina o acesso a proposicoes pelo Operador de Matérias |
||||
|
if nome_app == 'materia': |
||||
|
cts = ContentType.objects.filter( |
||||
|
app_label='materia').exclude(model='proposicao') |
||||
|
permissoes['materia'] = list( |
||||
|
Permission.objects.filter(content_type__in=cts)) |
||||
|
|
||||
|
# Configura as permissoes |
||||
|
for p in permissoes[nome_app]: |
||||
|
grupo.permissions.add(p) |
||||
|
|
||||
|
# 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 = cria_ou_reseta_grupo('Operador Geral') |
||||
|
for lista in permissoes.values(): |
||||
|
for p in lista: |
||||
|
grupo_geral.permissions.add(p) |
||||
|
|
||||
|
nome_usuario = 'operador_geral' |
||||
|
cria_usuario(nome_usuario, grupo_geral) |
||||
|
|
||||
# Autor |
# Autor |
||||
|
perms_autor = [] |
||||
perms_autor = Permission.objects.get(name="Can add Proposição") |
perms_autor.append(Permission.objects.get(name='Can add Proposição')) |
||||
|
perms_autor.append(Permission.objects.get(name='Can change Proposição')) |
||||
# Configura Permissoes Operador de Protocolo |
perms_autor.append(Permission.objects.get(name='Can delete Proposição')) |
||||
for p in perms_protocoloadm: |
|
||||
op_prot.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Sessao |
|
||||
for p in perms_sessao: |
|
||||
op_sessao.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Comissao |
|
||||
for p in perms_comissoes: |
|
||||
op_comissao.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Administracao |
|
||||
for p in perms_docadm: |
|
||||
op_adm.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Norma |
|
||||
for p in perms_norma: |
|
||||
op_norma.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Materia |
|
||||
for p in perms_materia: |
|
||||
op_materia.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Operador de Painel |
|
||||
for p in perms_painel: |
|
||||
op_painel.permissions.add(p) |
|
||||
|
|
||||
# Configura Permissoes Autor |
# Configura Permissoes Autor |
||||
op_autor.permissions.add(perms_autor) |
grupo = cria_ou_reseta_grupo('Autor') |
||||
|
for p in perms_autor: |
||||
# Configura Permissoes Operador Geral |
grupo.permissions.add(p) |
||||
perms_op_geral = perms_protocoloadm + perms_sessao + perms_comissoes |
|
||||
perms_op_geral = perms_op_geral + perms_docadm + perms_norma |
nome_usuario = 'operador_autor' |
||||
perms_op_geral = perms_op_geral + perms_materia |
cria_usuario(nome_usuario, grupo_geral) |
||||
perms_op_geral = perms_op_geral + perms_parlamentares + perms_painel |
|
||||
perms_op_geral = perms_op_geral + permissoes_base |
|
||||
|
|
||||
for p in perms_op_geral: |
|
||||
op_geral.permissions.add(p) |
|
||||
op_geral.permissions.add(perms_autor) |
|
||||
|
|
||||
# Cria usuarios |
|
||||
op_geral_user = User.objects.get_or_create(username='op_geral')[0] |
|
||||
op_geral_user.set_password('interlegis') |
|
||||
op_geral_user.save() |
|
||||
op_geral.user_set.add(op_geral_user) |
|
||||
|
|
||||
op_materia_user = User.objects.get_or_create(username='op_materia')[0] |
|
||||
op_materia_user.set_password('interlegis') |
|
||||
op_materia_user.save() |
|
||||
op_materia.user_set.add(op_materia_user) |
|
||||
|
|
||||
op_prot_user = User.objects.get_or_create(username='op_protocolo')[0] |
|
||||
op_prot_user.set_password('interlegis') |
|
||||
op_prot_user.save() |
|
||||
op_prot.user_set.add(op_prot_user) |
|
||||
|
|
||||
op_sessao_user = User.objects.get_or_create(username='op_sessao')[0] |
|
||||
op_sessao_user.set_password('interlegis') |
|
||||
op_sessao_user.save() |
|
||||
op_sessao.user_set.add(op_sessao_user) |
|
||||
|
|
||||
op_comissao_user = User.objects.get_or_create(username='op_comissao')[0] |
|
||||
op_comissao_user.set_password('interlegis') |
|
||||
op_comissao_user.save() |
|
||||
op_comissao.user_set.add(op_comissao_user) |
|
||||
|
|
||||
op_adm_user = User.objects.get_or_create(username='op_adm')[0] |
|
||||
op_adm_user.set_password('interlegis') |
|
||||
op_adm_user.save() |
|
||||
op_adm.user_set.add(op_adm_user) |
|
||||
|
|
||||
op_norma_user = User.objects.get_or_create(username='op_norma')[0] |
|
||||
op_norma_user.set_password('interlegis') |
|
||||
op_norma_user.save() |
|
||||
op_norma.user_set.add(op_norma_user) |
|
||||
|
|
||||
op_painel_user = User.objects.get_or_create(username='op_painel')[0] |
|
||||
op_painel_user.set_password('interlegis') |
|
||||
op_painel_user.save() |
|
||||
op_painel.user_set.add(op_norma_user) |
|
||||
|
|
||||
op_autor_user = User.objects.get_or_create(username='op_autor')[0] |
|
||||
op_autor_user.set_password('interlegis') |
|
||||
op_autor_user.save() |
|
||||
op_autor.user_set.add(op_autor_user) |
|
||||
|
|
||||
if __name__ == '__main__': |
if __name__ == '__main__': |
||||
cria_grupos_permissoes() |
cria_grupos_permissoes() |
||||
|
@ -0,0 +1,47 @@ |
|||||
|
import pytest |
||||
|
from django.apps import apps |
||||
|
from django.contrib.auth.models import Group, Permission |
||||
|
from django.contrib.contenttypes.models import ContentType |
||||
|
|
||||
|
from inicializa_grupos_autorizacoes import cria_grupos_permissoes |
||||
|
|
||||
|
pytestmark = pytest.mark.django_db |
||||
|
|
||||
|
apps_com_permissao_padrao = [ |
||||
|
'comissoes', 'norma', 'sessao', 'painel'] |
||||
|
|
||||
|
|
||||
|
@pytest.mark.parametrize('app_label', apps_com_permissao_padrao) |
||||
|
def test_grupo_padrao_tem_permissoes_sobre_todo_o_app(app_label): |
||||
|
|
||||
|
app = apps.get_app_config(app_label) |
||||
|
|
||||
|
# código testado |
||||
|
cria_grupos_permissoes() |
||||
|
|
||||
|
def gerar_permissoes(app): |
||||
|
for model in app.get_models(): |
||||
|
for op in ['add', 'change', 'delete']: |
||||
|
yield model, 'Can %s %s' % (op, model._meta.verbose_name) |
||||
|
grupo = Group.objects.get(name='Operador de %s' % app.verbose_name) |
||||
|
esperado = set(gerar_permissoes(app)) |
||||
|
|
||||
|
real = set((p.content_type.model_class(), p.name) |
||||
|
for p in grupo.permissions.all()) |
||||
|
assert real == esperado |
||||
|
|
||||
|
|
||||
|
@pytest.mark.parametrize('app_label', apps_com_permissao_padrao) |
||||
|
def test_permissoes_extras_sao_apagadas(app_label): |
||||
|
|
||||
|
app = apps.get_app_config(app_label) |
||||
|
grupo = Group.objects.create(name='Operador de %s' % app.verbose_name) |
||||
|
|
||||
|
permissao_errada = Permission.objects.create( |
||||
|
name='STUB', content_type=ContentType.objects.first()) |
||||
|
grupo.permissions.add(permissao_errada) |
||||
|
|
||||
|
# código testado |
||||
|
cria_grupos_permissoes() |
||||
|
|
||||
|
assert not grupo.permissions.filter(id=permissao_errada.id).exists() |
Loading…
Reference in new issue