# app/controllers/usuarios_controller.rb class UsuariosController < ApplicationController before_action :set_usuario, only: [:show, :edit, :update, :destroy, :toggle_ativo] def index authorize User @usuarios = policy_scope(User).order(:name).page(params[:page]).per(20) @roles = User.roles.keys end def show authorize @usuario end def new @usuario = User.new authorize @usuario end def create @usuario = User.new(usuario_params) authorize @usuario if @usuario.save AuditoriaLog.registrar(current_user, 'criar_usuario', request.remote_ip, detalhes: "Criou usuário #{@usuario.email} (#{@usuario.role})") redirect_to usuarios_path, notice: 'Usuário criado com sucesso.' else render :new, status: :unprocessable_entity end end def edit authorize @usuario end def update authorize @usuario if @usuario.update(usuario_params_update) AuditoriaLog.registrar(current_user, 'editar_usuario', request.remote_ip, detalhes: "Editou usuário #{@usuario.email}") redirect_to usuarios_path, notice: 'Usuário atualizado.' else render :edit, status: :unprocessable_entity end end def destroy authorize @usuario if @usuario == current_user redirect_to usuarios_path, alert: 'Você não pode excluir sua própria conta.' return end @usuario.destroy AuditoriaLog.registrar(current_user, 'excluir_usuario', request.remote_ip, detalhes: "Excluiu usuário #{@usuario.email}") redirect_to usuarios_path, notice: 'Usuário removido.' end def toggle_ativo authorize @usuario, :update? @usuario.update!(ativo: !@usuario.ativo) status = @usuario.ativo? ? 'ativado' : 'desativado' AuditoriaLog.registrar(current_user, "usuario_#{status}", request.remote_ip, detalhes: "#{@usuario.email} foi #{status}") redirect_to usuarios_path, notice: "Usuário #{status} com sucesso." end private def set_usuario @usuario = User.find(params[:id]) end def usuario_params params.require(:user).permit(:name, :email, :password, :password_confirmation, :role, :pin_acesso, :ativo) end def usuario_params_update permitted = [:name, :email, :role, :pin_acesso, :ativo] permitted += [:password, :password_confirmation] if params[:user][:password].present? params.require(:user).permit(permitted) end end