Browse Source

Ajusta migração de usuários p nova forma de dump

pull/1580/head
Marcio Mazza 7 years ago
parent
commit
19a7ed9977
  1. 80
      sapl/legacy/migracao_usuarios.py
  2. 3
      sapl/legacy/migration.py

80
sapl/legacy/migracao_usuarios.py

@ -1,14 +1,9 @@
import yaml
from django.conf import settings
from django.contrib.auth.models import Group, User from django.contrib.auth.models import Group, User
from sapl.settings import MEDIA_ROOT
def le_yaml_dados_zope(caminho_yaml): PERFIL_LEGADO_PARA_NOVO = {legado: Group.objects.get(name=novo)
with open(caminho_yaml, 'r') as f: for legado, novo in [
dados = yaml.load(f.read())
return dados
PERFIL_LEGADO_PARA_NOVO = [
('Autor', 'Autor'), ('Autor', 'Autor'),
('Operador', 'Operador Geral'), ('Operador', 'Operador Geral'),
('Operador Comissao', 'Operador de Comissões'), ('Operador Comissao', 'Operador de Comissões'),
@ -18,32 +13,40 @@ PERFIL_LEGADO_PARA_NOVO = [
('Operador Parlamentar', 'Parlamentar'), ('Operador Parlamentar', 'Parlamentar'),
('Operador Protocolo', 'Operador de Protocolo Administrativo'), ('Operador Protocolo', 'Operador de Protocolo Administrativo'),
('Operador Sessao Plenaria', 'Operador de Sessão Plenária'), ('Operador Sessao Plenaria', 'Operador de Sessão Plenária'),
('Parlamentar', 'Votante'),
] ]
}
ADMINISTRADORES = ['Administrador', 'Manager'] ADMINISTRADORES = {'Administrador', 'Manager'}
VOTANTE = Group.objects.get(name='Votante') IGNORADOS = {
# sem significado fora do zope
'Alterar Senha', 'Authenticated', 'Owner',
# obsoletos (vide docs a seguir)
'Operador Mesa Diretora',
'Operador Ordem Dia',
'Operador Tabela Auxiliar',
'Operador Lexml',
}
def migra_usuarios(caminho_yaml):
"""
Existe um método em nosso projeto interno de **consulta a todos os sapls**
que exporta os dados de usuários (e nome da casa e url interna)
como um yaml.
Esse yaml é lido por essa rotina e os usuários são criados se necessário def migra_usuarios():
e seus perfis ajustados. """
o arquivo media/USERS e importa os usuários nele listados,
com senhas e perfis.
Os usuários são criados se necessário e seus perfis ajustados.
Os seguintes perfis no legado não correspondem a nenhum no código atual Os seguintes perfis no legado não correspondem a nenhum no código atual
e estão sendo **ignorados**: e estão sendo **ignorados**:
* Operador Mesa Diretora * Operador Mesa Diretora
Contei apenas **8 usuários**, em todas as bases, que tem esse perfil Apenas **8 usuários**, em todas as bases, m esse perfil
e não tem nem "Operador" nem "Operador Sessao Plenaria" e não têm nem "Operador" nem "Operador Sessao Plenaria"
* Operador Ordem Dia * Operador Ordem Dia
Contei apenas **16 usuários**, em todas as bases, que tem esse perfil Apenas **16 usuários**, em todas as bases, m esse perfil
e não tem nem "Operador" nem "Operador Sessao Plenaria" e não têm nem "Operador" nem "Operador Sessao Plenaria"
* Operador Tabela Auxiliar * Operador Tabela Auxiliar
A edição das tabelas auxiliares deve ser feita por um administrador A edição das tabelas auxiliares deve ser feita por um administrador
@ -51,19 +54,26 @@ def migra_usuarios(caminho_yaml):
* Operador Lexml * Operador Lexml
Também podemos assumir que essa é uma tarefa de um administrador Também podemos assumir que essa é uma tarefa de um administrador
""" """
dados = le_yaml_dados_zope(caminho_yaml)
db = settings.DATABASES['legacy']['NAME'] ARQUIVO_USUARIOS = MEDIA_ROOT.child('USERS')
nome, url, usuarios_perfis = dados[db] with open(ARQUIVO_USUARIOS, 'r') as f:
for nome, perfis in usuarios_perfis: usuarios = eval(f.read())
usuario, _ = User.objects.get_or_create(username=nome) usuarios = [
for legado, novo in PERFIL_LEGADO_PARA_NOVO: (nome,
if legado in perfis: # troca senha "inicial" por uma inutilizável
grupo = Group.objects.get(name=novo) senha if senha != 'inicial' else None,
usuario.groups.add(grupo) # filtra perfis ignorados
# Manager {p for p in perfis if p not in IGNORADOS})
if any(a in perfis for a in ADMINISTRADORES): for nome, senha, perfis in usuarios]
for nome, senha, perfis in usuarios:
usuario = User.objects.get_or_create(username=nome)[0]
for perfil in perfis:
if perfil in ADMINISTRADORES:
# Manager
usuario.is_staff = True usuario.is_staff = True
usuario.save() usuario.save()
# Votante else:
if 'Parlamentar' in perfis: usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil])
usuario.groups.add(VOTANTE) # apaga arquivo (importante pois contém senhas)
ARQUIVO_USUARIOS.remove()

3
sapl/legacy/migration.py

@ -825,7 +825,8 @@ def adjust_autor(new, old):
if not user_model.objects.filter(username=old.col_username).exists(): if not user_model.objects.filter(username=old.col_username).exists():
# cria um novo ususaŕio para o autor # cria um novo ususaŕio para o autor
user = user_model(username=old.col_username) user = user_model(username=old.col_username)
user.set_password(12345) # gera uma senha inutilizável, que precisará ser trocada
user.set_password(None)
with reversion.create_revision(): with reversion.create_revision():
user.save() user.save()
reversion.set_comment( reversion.set_comment(

Loading…
Cancel
Save