Login ainda nao funciona mas esta quase
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
from sqlalchemy import create_engine, Column, Integer, String, Boolean, Numeric, Date, ForeignKey
|
||||
from sqlalchemy.orm import relationship, sessionmaker
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
import pyotp
|
||||
import os
|
||||
|
||||
Base = declarative_base()
|
||||
engine = create_engine('sqlite:///database.db', echo=True)
|
||||
@@ -130,6 +133,7 @@ class Setor(Base):
|
||||
|
||||
relatorios_cotas = relationship("RelatorioCotasMensais", back_populates="setor")
|
||||
relatorios_vendas = relationship("RelatorioVendasMateriais", back_populates="setor")
|
||||
usuarios = relationship("Usuario", back_populates="setor")
|
||||
|
||||
class ComiteCentral(Base):
|
||||
__tablename__ = 'comites_centrais'
|
||||
@@ -164,4 +168,106 @@ class RelatorioVendasMateriais(Base):
|
||||
setor = relationship("Setor", back_populates="relatorios_vendas")
|
||||
comite = relationship("ComiteCentral", back_populates="relatorios_vendas")
|
||||
|
||||
Base.metadata.create_all(engine)
|
||||
class Usuario(Base):
|
||||
__tablename__ = 'usuarios'
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
username = Column(String(50), unique=True, nullable=False)
|
||||
password_hash = Column(String(255), nullable=False)
|
||||
email = Column(String(100), unique=True, nullable=True)
|
||||
otp_secret = Column(String(32), nullable=True)
|
||||
role_id = Column(Integer, ForeignKey('roles.id'), nullable=True)
|
||||
setor_id = Column(Integer, ForeignKey('setores.id'), nullable=True)
|
||||
ativo = Column(Boolean, default=True)
|
||||
is_admin = Column(Boolean, default=False)
|
||||
|
||||
role = relationship("Role", back_populates="usuarios")
|
||||
setor = relationship("Setor", back_populates="usuarios")
|
||||
|
||||
def __init__(self, username, password, is_admin=False):
|
||||
self.username = username
|
||||
self.set_password(password)
|
||||
self.otp_secret = pyotp.random_base32()
|
||||
self.is_admin = is_admin
|
||||
self.ativo = True
|
||||
|
||||
def set_password(self, password):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
|
||||
def check_password(self, password):
|
||||
return check_password_hash(self.password_hash, password)
|
||||
|
||||
def verify_otp(self, otp_code):
|
||||
totp = pyotp.TOTP(self.otp_secret)
|
||||
return totp.verify(otp_code)
|
||||
|
||||
def get_otp_uri(self):
|
||||
totp = pyotp.TOTP(self.otp_secret)
|
||||
return totp.provisioning_uri(self.username, issuer_name="Sistema de Gestão")
|
||||
|
||||
class Role(Base):
|
||||
__tablename__ = 'roles'
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
nome = Column(String(50), unique=True, nullable=False)
|
||||
nivel = Column(Integer, nullable=False) # Nível hierárquico (1: admin, 2: coordenador, 3: militante)
|
||||
|
||||
usuarios = relationship("Usuario", back_populates="role")
|
||||
permissoes = relationship("RolePermissao", back_populates="role")
|
||||
|
||||
class Permissao(Base):
|
||||
__tablename__ = 'permissoes'
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
nome = Column(String(50), unique=True, nullable=False)
|
||||
descricao = Column(String(255))
|
||||
|
||||
roles = relationship("RolePermissao", back_populates="permissao")
|
||||
|
||||
class RolePermissao(Base):
|
||||
__tablename__ = 'roles_permissoes'
|
||||
|
||||
role_id = Column(Integer, ForeignKey('roles.id'), primary_key=True)
|
||||
permissao_id = Column(Integer, ForeignKey('permissoes.id'), primary_key=True)
|
||||
|
||||
role = relationship("Role", back_populates="permissoes")
|
||||
permissao = relationship("Permissao", back_populates="roles")
|
||||
|
||||
# Remover o banco de dados existente (se existir)
|
||||
if os.path.exists('database.db'):
|
||||
os.remove('database.db')
|
||||
|
||||
# Criar todas as tabelas novamente
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
# Criar roles iniciais
|
||||
def create_initial_data():
|
||||
session = get_db_connection()
|
||||
try:
|
||||
# Criar role de admin
|
||||
admin_role = Role(nome="Administrador", nivel=1)
|
||||
session.add(admin_role)
|
||||
session.flush() # Para obter o ID da role
|
||||
|
||||
# Criar usuário admin
|
||||
admin = Usuario(
|
||||
username="admin",
|
||||
password="admin123",
|
||||
is_admin=True
|
||||
)
|
||||
admin.role_id = admin_role.id
|
||||
session.add(admin)
|
||||
|
||||
session.commit()
|
||||
print(f"Segredo OTP do admin: {admin.otp_secret}")
|
||||
print("Usuário admin criado com sucesso!")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Erro ao criar dados iniciais: {e}")
|
||||
session.rollback()
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
# Executar a criação dos dados iniciais
|
||||
if __name__ == "__main__":
|
||||
create_initial_data()
|
||||
Reference in New Issue
Block a user