Fix public access to private book view

This commit is contained in:
mirivlad 2025-11-27 09:27:40 +08:00
parent d850f54666
commit e51768622f
4 changed files with 19 additions and 9 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
*.log
.env
config/config.php
*.lock
uploads/*
vendor/composer

View File

@ -9,7 +9,7 @@
## 🚀 Возможности
- **Книги и серии:** создавайте серии и добавляйте книги с главами.
- **Редактор книг:** Markdown, автосохранение текста, интерактивное содержание.
- **Редактор книг:** WYSIWYG редактор Quill.js, автосохранение текста, интерактивное содержание.
- **Предпросмотр книг:**
- **Автор:** видит все черновики и опубликованные главы.
- **Публичный доступ:** только опубликованные главы по ссылке с `shared_token`.
@ -29,7 +29,7 @@
- **PHP расширения:** `mbstring`, `json`, `PDO`
- Веб-сервер с правами на запись в папки `config/` и `uploads/`
> Все библиотеки уже включены в `vendor/`. Composer не нужен.
> Composer не нужен. Все библиотеки уже включены в `vendor/`.
---
@ -61,10 +61,7 @@
Файл `config/config.php` содержит:
- Подключение к базе данных: `DB_HOST`, `DB_USER`, `DB_PASS`, `DB_NAME`
- Пути к файлам:
- `UPLOAD_PATH` — корневая папка загрузок
- `COVERS_PATH` / `COVERS_URL` — обложки книг
- `AVATARS_PATH` / `AVATARS_URL` — аватары пользователей
- Константы для системных путей
- Адрес сайта: `SITE_URL`
- Имя приложения: `APP_NAME` = "Web Writer"
@ -72,8 +69,7 @@
## 🛠 Дальнейшее развитие
- Планирую вынести работу с сущностями (книги, главы, серии, пользователи) в контроллеры.
- Создать единую точку входа для приложения.
- Возможно, добавится поддержка комментариев для публичных книг и рейтинг. Но это не точно :)
---

View File

@ -268,9 +268,12 @@ class BookController extends BaseController {
}
public function viewAll($id) {
$this->requireLogin();
$user_id = $_SESSION['user_id'];
$bookModel = new Book($this->pdo);
$chapterModel = new Chapter($this->pdo);
$book = $bookModel->findById($id);
$book = $bookModel->findByUserBook($id, $user_id);
if (!$book) {
http_response_code(404);
$this->render('errors/404');

View File

@ -12,6 +12,11 @@ class Book {
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function findByUserBook($id, $user_id) {
$stmt = $this->pdo->prepare("SELECT * FROM books WHERE id = ? AND user_id=?");
$stmt->execute([$id, $user_id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function findByShareToken($share_token) {
$stmt = $this->pdo->prepare("SELECT * FROM books WHERE share_token = ?");