215 lines
10 KiB
Python
215 lines
10 KiB
Python
from app.database.models import RbacPermissao, RbacPapel
|
|
from app.database.session import sessionmanager
|
|
from sqlalchemy import select
|
|
|
|
|
|
async def add_or_update_entity(session, model, filters, data):
|
|
result = await session.execute(select(model).filter_by(**filters))
|
|
entity = result.scalars().first()
|
|
if not entity:
|
|
entity = model(**data)
|
|
session.add(entity)
|
|
else:
|
|
for key, value in data.items():
|
|
setattr(entity, key, value)
|
|
return entity
|
|
|
|
|
|
async def add_permissions_to_role(session, papel_data, permissoes_ids):
|
|
for permissao_id in permissoes_ids:
|
|
result_permissao = await session.execute(select(RbacPermissao).filter_by(id=permissao_id))
|
|
permissao_data = result_permissao.scalars().first()
|
|
if permissao_data and permissao_data not in papel_data.permissoes:
|
|
papel_data.permissoes.append(permissao_data)
|
|
|
|
for permissao in papel_data.permissoes:
|
|
if permissao.id not in permissoes_ids:
|
|
papel_data.permissoes.remove(permissao)
|
|
|
|
|
|
async def remove_unused_entities(session, model, valid_ids, id_field="id"):
|
|
result_all = await session.execute(select(model))
|
|
all_entities = result_all.scalars().all()
|
|
for entity in all_entities:
|
|
entity_id = str(getattr(entity, id_field))
|
|
if entity_id not in valid_ids:
|
|
await session.delete(entity)
|
|
await session.flush()
|
|
|
|
|
|
async def process_permissions(session, endpoint_permissao1):
|
|
ignored_permissions = []
|
|
for permissao in endpoint_permissao1:
|
|
if permissao["id"] is None or permissao["nome"] is None:
|
|
ignored_permissions.append(permissao)
|
|
continue
|
|
|
|
await add_or_update_entity(session, RbacPermissao, {"id": permissao["id"]}, permissao)
|
|
permissoes_ids = [str(permissao["id"]) for permissao in endpoint_permissao1]
|
|
await remove_unused_entities(session, RbacPermissao, permissoes_ids, id_field="id")
|
|
return ignored_permissions
|
|
|
|
|
|
async def process_roles(session, endpoint_papel):
|
|
ignored_roles = []
|
|
for papel in endpoint_papel:
|
|
if papel.get("nome") is None:
|
|
ignored_roles.append(papel)
|
|
continue
|
|
|
|
papel_data = await add_or_update_entity(session, RbacPapel, {"nome": papel["nome"]}, {"nome": papel["nome"]})
|
|
await session.flush()
|
|
await session.refresh(papel_data)
|
|
|
|
permissoes_ids = papel["permissoes"] if papel["permissoes"] is not None else []
|
|
await add_permissions_to_role(session, papel_data, permissoes_ids)
|
|
|
|
papeis_nomes = [papel["nome"] for papel in endpoint_papel]
|
|
await remove_unused_entities(session, RbacPapel, papeis_nomes, id_field="nome")
|
|
return ignored_roles
|
|
|
|
|
|
async def initialize_permissions():
|
|
async with sessionmanager.session() as session:
|
|
# Definindo as permissões
|
|
endpoint_permissao = [
|
|
{"id": 1, "nome": "Permissão Total"},
|
|
{"id": 2, "nome": "Permissão Setor Comercial"},
|
|
{"id": 3, "nome": "Permissão RBAC"},
|
|
{"id": 4, "nome": "Permissão Setor Estoque"},
|
|
{"id": 5, "nome": "Permissão Setor Financeiro"},
|
|
{"id": 30, "nome": "Permissão Relação Comercial"},
|
|
{"id": 31, "nome": "Permissão Tipo Endereço"},
|
|
{"id": 32, "nome": "Permissão Endereço"},
|
|
{"id": 33, "nome": "Permissão Pessoa"},
|
|
{"id": 34, "nome": "Permissão Usuários"},
|
|
{"id": 35, "nome": "Permissão Papel"},
|
|
{"id": 36, "nome": "Permissão Setor"},
|
|
{"id": 37, "nome": "Permissão Tipo Equipamento"},
|
|
{"id": 38, "nome": "Permissão Equipamento"},
|
|
{"id": 39, "nome": "Permissão Itens Equipamento"},
|
|
{"id": 40, "nome": "Permissão Manutenção Equipamento"},
|
|
{"id": 41, "nome": "Permissão Papeis"},
|
|
{"id": 101, "nome": "Relação Comercial Criar"},
|
|
{"id": 102, "nome": "Relação Comercial Criar Muitos"},
|
|
{"id": 103, "nome": "Relação Comercial Buscar Todos"},
|
|
{"id": 104, "nome": "Relação Comercial Buscar Vários"},
|
|
{"id": 105, "nome": "Relação Comercial Buscar"},
|
|
{"id": 106, "nome": "Relação Comercial Atualizar"},
|
|
{"id": 107, "nome": "Relação Comercial Atualizar Vários"},
|
|
{"id": 108, "nome": "Relação Comercial Desativar"},
|
|
{"id": 201, "nome": "Tipo Endereço Criar"},
|
|
{"id": 202, "nome": "Tipo Endereço Criar Muitos"},
|
|
{"id": 203, "nome": "Tipo Endereço Buscar Todos"},
|
|
{"id": 204, "nome": "Tipo Endereço Buscar Vários"},
|
|
{"id": 205, "nome": "Tipo Endereço Buscar"},
|
|
{"id": 206, "nome": "Tipo Endereço Atualizar"},
|
|
{"id": 207, "nome": "Tipo Endereço Atualizar Vários"},
|
|
{"id": 208, "nome": "Tipo Endereço Desativar"},
|
|
{"id": 301, "nome": "Endereço Criar"},
|
|
{"id": 302, "nome": "Endereço Criar Muitos"},
|
|
{"id": 303, "nome": "Endereço Buscar Todos"},
|
|
{"id": 304, "nome": "Endereço Buscar Vários"},
|
|
{"id": 305, "nome": "Endereço Buscar"},
|
|
{"id": 306, "nome": "Endereço Atualizar"},
|
|
{"id": 307, "nome": "Endereço Atualizar Vários"},
|
|
{"id": 308, "nome": "Endereço Desativar"},
|
|
{"id": 401, "nome": "Pessoa Criar"},
|
|
{"id": 402, "nome": "Pessoa Criar Muitos"},
|
|
{"id": 403, "nome": "Pessoa Buscar Todos"},
|
|
{"id": 404, "nome": "Pessoa Buscar Vários"},
|
|
{"id": 405, "nome": "Pessoa Buscar"},
|
|
{"id": 406, "nome": "Pessoa Atualizar"},
|
|
{"id": 408, "nome": "Pessoa Desativar"},
|
|
{"id": 501, "nome": "Usuário Criar"},
|
|
{"id": 502, "nome": "Usuário Criar Muitos"},
|
|
{"id": 503, "nome": "Usuário Buscar Todos"},
|
|
{"id": 504, "nome": "Usuário Buscar Vários"},
|
|
{"id": 505, "nome": "Usuário Buscar"},
|
|
{"id": 506, "nome": "Usuário Atualizar"},
|
|
{"id": 507, "nome": "Usuário Atualizar Vários"},
|
|
{"id": 508, "nome": "Usuário Desativar"},
|
|
{"id": 601, "nome": "Papel Criar"},
|
|
{"id": 602, "nome": "Papel Criar Muitos"},
|
|
{"id": 603, "nome": "Papel Buscar Todos"},
|
|
{"id": 604, "nome": "Papel Buscar Vários"},
|
|
{"id": 605, "nome": "Papel Buscar"},
|
|
{"id": 606, "nome": "Papel Atualizar"},
|
|
{"id": 607, "nome": "Papel Atualizar Vários"},
|
|
{"id": 608, "nome": "Papel Desativar"},
|
|
{"id": 701, "nome": "Setor Criar"},
|
|
{"id": 702, "nome": "Setpr Criar Muitos"},
|
|
{"id": 703, "nome": "Setor Buscar Todos"},
|
|
{"id": 704, "nome": "Setor Buscar Vários"},
|
|
{"id": 705, "nome": "Setor Buscar"},
|
|
{"id": 706, "nome": "Setor Atualizar"},
|
|
{"id": 707, "nome": "Setor Atualizar Vários"},
|
|
{"id": 708, "nome": "Setor Desativar"},
|
|
{"id": 801, "nome": "Tipo Equipamento Criar"},
|
|
{"id": 802, "nome": "Tipo Equipamento Criar Muitos"},
|
|
{"id": 803, "nome": "Tipo Equipamento Buscar Todos"},
|
|
{"id": 804, "nome": "Tipo Equipamento Buscar Vários"},
|
|
{"id": 805, "nome": "Tipo Equipamento Buscar"},
|
|
{"id": 806, "nome": "Tipo Equipamento Atualizar"},
|
|
{"id": 807, "nome": "Tipo Equipamento Atualizar Vários"},
|
|
{"id": 808, "nome": "Tipo Equipamento Desativar"},
|
|
{"id": 901, "nome": "Equipamento Criar"},
|
|
{"id": 902, "nome": "Equipamento Criar Muitos"},
|
|
{"id": 903, "nome": "Equipamento Buscar Todos"},
|
|
{"id": 904, "nome": "Equipamento Buscar Vários"},
|
|
{"id": 905, "nome": "Equipamento Buscar"},
|
|
{"id": 906, "nome": "Equipamento Atualizar"},
|
|
{"id": 907, "nome": "Equipamento Atualizar Vários"},
|
|
{"id": 908, "nome": "Equipamento Desativar"},
|
|
{"id": 1001, "nome": "Itens Equipamento Criar"},
|
|
{"id": 1002, "nome": "Itens Equipamento Criar Muitos"},
|
|
{"id": 1003, "nome": "Itens Equipamento Buscar Todos"},
|
|
{"id": 1004, "nome": "Itens Equipamento Buscar Vários"},
|
|
{"id": 1005, "nome": "Itens Equipamento Buscar"},
|
|
{"id": 1006, "nome": "Itens Equipamento Atualizar"},
|
|
{"id": 1007, "nome": "Itens Equipamento Atualizar Vários"},
|
|
{"id": 1008, "nome": "Itens Equipamento Desativar"},
|
|
{"id": 1101, "nome": "Manutenção Equipamento Criar"},
|
|
{"id": 1102, "nome": "Manutenção Equipamento Criar Muitos"},
|
|
{"id": 1103, "nome": "Manutenção Equipamento Buscar Todos"},
|
|
{"id": 1104, "nome": "Manutenção Equipamento Buscar Vários"},
|
|
{"id": 1105, "nome": "Manutenção Equipamento Buscar"},
|
|
{"id": 1106, "nome": "Manutenção Equipamento Atualizar"},
|
|
{"id": 1107, "nome": "Manutenção Equipamento Atualizar Vários"},
|
|
{"id": 1108, "nome": "Manutenção Equipamento Desativar"},
|
|
{"id": 1201, "nome": "Papeis Criar"},
|
|
{"id": 1202, "nome": "Papeis Criar Muitos"},
|
|
{"id": 1203, "nome": "Papeis Buscar Todos"},
|
|
{"id": 1204, "nome": "Papeis Buscar Vários"},
|
|
{"id": 1205, "nome": "Papeis Buscar"},
|
|
{"id": 1206, "nome": "Papeis Atualizar"},
|
|
{"id": 1207, "nome": "Papeis Atualizar Vários"},
|
|
{"id": 1208, "nome": "Papeis Desativar"},
|
|
|
|
]
|
|
|
|
# Definindo os papéis
|
|
endpoint_papel = [
|
|
{"nome": "Super Administrador", "permissoes": [1]},
|
|
# Outros papéis aqui
|
|
]
|
|
|
|
# Processamento das permissões e papéis
|
|
ignored_permissions = await process_permissions(session, endpoint_permissao)
|
|
ignored_roles = await process_roles(session, endpoint_papel)
|
|
|
|
await session.commit()
|
|
|
|
if not ignored_permissions and not ignored_roles:
|
|
print("Permissões e papéis inicializados com sucesso")
|
|
else:
|
|
if ignored_permissions:
|
|
print("Aviso: As seguintes permissões foram ignoradas devido a campos None:")
|
|
for permissao in ignored_permissions:
|
|
print(permissao)
|
|
|
|
if ignored_roles:
|
|
print("Aviso: Os seguintes papéis foram ignorados devido a campos None:")
|
|
for papel in ignored_roles:
|
|
print(papel)
|