💻 Exemplos: Capítulo 04: Operadores Bitwise, Manipulação Avançada de Strings e Formatação (F-Strings)
Especialização em Sistemas com Python 3.12+ • Capítulo 04
🎯 Demonstração Prática: Sistema de Segurança de Arquivos e Formatação com F-Strings
O exemplo abaixo combina a eficiência de computação em nível de bits com manipulação e formatação avançada de strings:
- Emprego de
enum.IntFlagpara implementar um controle de privilégios e permissões no padrão POSIX/Unix. - Auditoria de pacotes e decodificação de cabeçalhos binários.
- F-Strings com especificadores de largura, alinhamento, formatação de binários (
:08b) e depuração (=).
"""
demonstracao_bitwise_e_strings.py
Controle de Acessos com IntFlag, Máscaras de Bits e Formatação Avançada de F-Strings.
Compatível com Python 3.12+ (PEP 701).
"""
from __future__ import annotations
from enum import IntFlag, auto
from typing import Final
# ==============================================================================
# 1. PERMISSÕES E FLAGS BITWISE
# ==============================================================================
class PermissaoRecurso(IntFlag):
NENHUMA = 0
LEITURA = auto() # 1 << 0 = 0b00000001 (1)
ESCRITA = auto() # 1 << 1 = 0b00000010 (2)
EXECUCAO = auto() # 1 << 2 = 0b00000100 (4)
EXCLUSAO = auto() # 1 << 3 = 0b00001000 (8)
AUDITORIA = auto() # 1 << 4 = 0b00010000 (16)
ADMINISTRADOR = auto() # 1 << 5 = 0b00100000 (32)
# Perfis pré-compostos
PERFIL_CONSULTA = LEITURA | AUDITORIA
PERFIL_OPERADOR = LEITURA | ESCRITA | EXECUCAO
PERFIL_ROOT = LEITURA | ESCRITA | EXECUCAO | EXCLUSAO | AUDITORIA | ADMINISTRADOR
# ==============================================================================
# 2. AUDITOR E GERENCIADOR DE RECURSOS
# ==============================================================================
class AuditoriaSeguranca:
@staticmethod
def checar_acesso(mascara_usuario: PermissaoRecurso, permissao_necessaria: PermissaoRecurso) -> bool:
"""Verifica se todos os bits da permissão requerida estão ativos na máscara do usuário."""
return (mascara_usuario & permissao_necessaria) == permissao_necessaria
@staticmethod
def conceder(mascara_usuario: PermissaoRecurso, nova_permissao: PermissaoRecurso) -> PermissaoRecurso:
"""Ativa novos bits através do operador OR (|)."""
return mascara_usuario | nova_permissao
@staticmethod
def revogar(mascara_usuario: PermissaoRecurso, permissao_remover: PermissaoRecurso) -> PermissaoRecurso:
"""Desativa bits específicos através do operador AND com complemento invertido (& ~)."""
return mascara_usuario & ~permissao_remover
@staticmethod
def alternar(mascara_usuario: PermissaoRecurso, permissao_toggle: PermissaoRecurso) -> PermissaoRecurso:
"""Inverte o estado dos bits especificados através do operador XOR (^)."""
return mascara_usuario ^ permissao_toggle
# ==============================================================================
# 3. MANIPULAÇÃO E SANITIZAÇÃO DE TEXTO
# ==============================================================================
def sanitizar_chave_acesso(token_bruto: str) -> str:
"""Higieniza token removendo pontuações, espaços e convertendo em maiúsculas."""
caracteres_limpos: list[str] = [c.upper() for c in token_bruto if c.isalnum()]
return "".join(caracteres_limpos)
# ==============================================================================
# 4. EXECUÇÃO DEMONSTRATIVA E FORMATAÇÃO COM F-STRINGS
# ==============================================================================
if __name__ == "__main__":
# Criação de um usuário operacional
usuario_operador: PermissaoRecurso = PermissaoRecurso.PERFIL_OPERADOR
print("=" * 80)
print(" SISTEMA DE AUDITORIA DE SEGURANÇA E BITS (PYTHON 3.12+)")
print("=" * 80)
# Exibição binária formatada com F-Strings
print(f"Perfil Operador (Decimal) : {usuario_operador.value}")
print(f"Representação Binária : 0b{usuario_operador.value:08b}")
print(f"Representação Hexadecimal : 0x{usuario_operador.value:04X}")
print("-" * 80)
# Matriz de Testes de Permissão
testes: list[tuple[str, PermissaoRecurso]] = [
("Leitura de Arquivos", PermissaoRecurso.LEITURA),
("Gravação e Edição", PermissaoRecurso.ESCRITA),
("Execução de Scripts", PermissaoRecurso.EXECUCAO),
("Exclusão Definitiva", PermissaoRecurso.EXCLUSAO),
("Acesso Administrativo", PermissaoRecurso.ADMINISTRADOR),
]
print(f"{'Operação Solicitada':<25} | {'Bitmask':<10} | {'Resultado da Autorização':<25}")
print("-" * 80)
for nome_teste, flag in testes:
autorizado: bool = AuditoriaSeguranca.checar_acesso(usuario_operador, flag)
status_str: str = "AUTORIZADO" if autorizado else "ACESSO NEGADO"
print(f"{nome_teste:<25} | 0b{flag.value:08b} | [{status_str:^15}]")
print("-" * 80)
print(">> Atualizando privilégios do operador...")
# Concessão e Revogação
usuario_operador = AuditoriaSeguranca.conceder(usuario_operador, PermissaoRecurso.AUDITORIA)
usuario_operador = AuditoriaSeguranca.revogar(usuario_operador, PermissaoRecurso.ESCRITA)
print(f"Nova Máscara após ajustes : 0b{usuario_operador.value:08b}")
print(f"Possui Auditoria? : {AuditoriaSeguranca.checar_acesso(usuario_operador, PermissaoRecurso.AUDITORIA)}")
print(f"Ainda possui Escrita? : {AuditoriaSeguranca.checar_acesso(usuario_operador, PermissaoRecurso.ESCRITA)}")
# Demonstração de Recursos Modernos da PEP 701 (Python 3.12)
dados_sessao: dict[str, str | float] = {
"usuario": "carlos.silva",
"duracao_horas": 4.75,
"consumo_memoria_mb": 128.456,
"chave_bruta": " usr-sec-984_ab@29 "
}
chave_processada: str = sanitizar_chave_acesso(str(dados_sessao["chave_bruta"]))
print("\n" + "=" * 80)
print(" METADADOS DA SESSÃO FORMATADOS COM PEP 701")
print("=" * 80)
# No Python 3.12, podemos reutilizar aspas duplas dentro das f-strings
print(f"Usuário Ativo : {dados_sessao['usuario'].upper()}")
print(f"Duração Conexão : {dados_sessao['duracao_horas']:>10.2f} horas")
print(f"Memória Alocada : {dados_sessao['consumo_memoria_mb']:>10.1f} MB")
print(f"Token Sanitizado : {chave_processada}")
print("=" * 80)