mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.8 KiB
114 lines
3.8 KiB
from django.apps import apps
|
|
from django.contrib.auth.models import Group, Permission, User
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
|
|
def cria_ou_reseta_grupo(nome):
|
|
grupo = Group.objects.get_or_create(name=nome)[0]
|
|
for p in list(grupo.permissions.all()):
|
|
grupo.permissions.remove(p)
|
|
return grupo
|
|
|
|
|
|
def cria_usuario(nome, grupo):
|
|
nome_usuario = nome
|
|
usuario = User.objects.get_or_create(username=nome_usuario)[0]
|
|
usuario.set_password('interlegis')
|
|
usuario.save()
|
|
grupo.user_set.add(usuario)
|
|
|
|
|
|
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 = cria_ou_reseta_grupo(nome_grupo)
|
|
for p in permissoes['documento_administrativo']:
|
|
grupo.permissions.add(p)
|
|
|
|
nome_usuario = 'operador_administrativo'
|
|
cria_usuario(nome_usuario, grupo)
|
|
|
|
# prolocolo administrativo
|
|
cts = cts.exclude(model__icontains='tramitacao').exclude(
|
|
model__icontains='documentoadministrativo')
|
|
permissoes['protocoloadm'] = list(
|
|
Permission.objects.filter(content_type__in=cts))
|
|
nome_grupo = 'Operador de Protocolo Administrativo'
|
|
grupo = cria_ou_reseta_grupo(nome_grupo)
|
|
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
|
|
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 Autor
|
|
grupo = cria_ou_reseta_grupo('Autor')
|
|
for p in perms_autor:
|
|
grupo.permissions.add(p)
|
|
|
|
nome_usuario = 'operador_autor'
|
|
cria_usuario(nome_usuario, grupo)
|
|
|
|
if __name__ == '__main__':
|
|
cria_grupos_permissoes()
|
|
|