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

View File

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

View File

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