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)