Hola @miguel_deco50, @angel_96 tiene razón en la raíz del problema. El objeto employee dentro del $this->context de un controlador frontal no se carga por defecto, aunque estés logueado en el back office. El código original asume un contexto de back office.
Para solucionar esto de forma segura y permitir el acceso a un administrador logueado desde el front, debes verificar no solo si $this->context->employee está inicializado, sino también si existe un id_employee en la cookie, que es donde PrestaShop guarda la sesión del administrador para estos casos. Así, cubres ambos escenarios.
Aquí te dejo una pequeña modificación que deberías aplicar en tu archivo shipmethodrules/controllers/front/simulate.php:
function postProcess()
{
// Verifica si hay un empleado logueado en el contexto (BO) o en la cookie (BO logueado en FO)
if (!((isset($this->context->employee->id) && (int) $this->context->employee->id > 0) || (isset($this->context->cookie->id_employee) && (int) $this->context->cookie->id_employee > 0))) {
$this->ajaxDie(json_encode(['success' => false, 'error' => 'Unauthorized']));
}
$idCart = (int) Tools::getValue('id_cart');
$cart = $idCart > 0 ? new Cart($idCart) : $this->context->cart;
if (!Validate::isLoadedObject($cart)) {
Con este cambio, la condición if ahora comprueba si existe un id válido en el objeto employee del contexto (que sería cierto en un controlador de BO) O si hay un id_employee válido en la cookie de sesión (que sería cierto para un admin logueado accediendo a un controlador de FO). Esto debería resolver tu problema de acceso no autorizado.