Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Стъпка 0. Подготовка
- Използваме подход “Learning by Doing”.
- Архивираме проекта с цел да възстановим данните, ако се наложи.
- Стартираме Apache & MySQL & cmd
- Ако XAMPP е инсталиран на D:, то първо сменяме устройството, а после директорията:
- D:
- cd \xampp\htdocs\laravel8
- PATH=%PATH%;C:\xampp\php
- PATH=%PATH%;D:\xampp\php
- Стъпка 1. Инсталираме Laravel Breeze
- Следваме ръководството:
- https://laravel.com/docs/8.x/starter-kits#laravel-breeze
- НО работим творчески и използваме проекта от предходното упражнение!
- composer require laravel/breeze --dev
- или
- php \xampp\composer.phar require laravel/breeze --dev
- Изпълняваме:
- php artisan breeze:install
- Инсталираме Node.js преносимо.
- https://nodejs.org/en/download/
- https://nodejs.org/dist/v16.13.1/node-v16.13.1-win-x64.zip
- Разархивираме в \xampp\node
- PATH=%PATH%;C:\xampp\node
- npm install
- npm run dev
- Стъпка 2. Работим по Model-а - admin middleware
- Отваряме
- \xampp\htdocs\laravel8\database\migrations\2014_10_12_000000_create_users_table.php
- Добавяме код, който добавя ново поле в таблицата от БД - дали потребителя има администраторски права, т.е. възможност да редактира и изтрива записи:
- public function up()
- {
- Schema::create('users', function (Blueprint $table) {
- $table->id();
- $table->boolean('isAdmin')->nullable();
- $table->string('name');
- $table->string('email')->unique();
- $table->timestamp('email_verified_at')->nullable();
- $table->string('password');
- $table->rememberToken();
- $table->timestamps();
- });
- }
- Чрез phpMyAdmin ръчно ще се задава кои потребители имат администраторски права.
- Стъпка 3. Стартираме миграция
- php artisan migrate:refresh
- В резултат се изтриват и създават отново всички таблици.
- Стъпка 4. Работим по маршрутизацията - защитаваме достъпа до games
- Към момента е защитен достъпа само до dashboard. Ще защитим достъпа и до games.
- Отваряме:
- \xampp\htdocs\laravel8\routes\web.php
- В стария файл web.php имаше:
- Route::resource('games', 'GameController');
- , но понеже целия файл беше презаписан от инсталацията на Laravel Breeze, то този ред сега го няма.
- Добавяме в края на файла:
- Route::resource('games', 'GameController')->middleware('auth');
- Стъпка 5. Работим по View-то
- Добавяне на бутон за изход.
- Отваряме файл:
- \xampp\htdocs\laravel8\resources\views\index.blade.php
- Добавяме:
- <a href="{{ route('games.create')}}" class="btn btn-success">ADD</a>
- <div class="float-right">
- {{ Auth::user()->name }}
- <a href="{{ route('logout') }}" class="btn btn-dark" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
- {{ __('Logout') }}
- </a>
- <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
- @csrf
- </form>
- </div>
- Проверка:
- http://127.0.0.1/laravel8/public/games
- Достъп до games трябва да имат само регистрирани и логнати потребители.
- Обикновеният потребител ще може само да добавя нови записи, а този с администраторски права и да редактира и изтрива.
- Регистрираме 2-ма отделни потребители. На единия чрез phpMyAdmin задаваме на isAdmin стойност 1.
- http://127.0.0.1/phpmyadmin/sql.php?db=laravel&table=users
- Отваряме:
- \xampp\htdocs\laravel8\resources\views\index.blade.php
- Променяме:
- <td><a href="{{ route('games.edit', $game->id)}}" class="btn btn-primary">Edit</a></td>
- Обграждаме показването на бутона за редактиране в условен израз:
- <td>
- @if(Auth::user()->isAdmin==1)
- <a href="{{ route('games.edit', $game->id)}}" class="btn btn-primary">Edit</a>
- @endif
- </td>
- Променяме:
- <td>
- <form action="{{ route('games.destroy', $game->id)}}" method="post">
- @csrf
- @method('DELETE')
- <button class="btn btn-danger" type="submit">Delete</button>
- </form>
- </td>
- Обграждаме показването на бутона за изтриване в условен израз:
- <td>
- @if(Auth::user()->isAdmin==1)
- <form action="{{ route('games.destroy', $game->id)}}" method="post">
- @csrf
- @method('DELETE')
- <button class="btn btn-danger" type="submit">Delete</button>
- </form>
- @endif
- </td>
- Добавяне показване на съобщения за грешки в червен цвят:
- <div class="uper">
- @if(session()->get('success'))
- <div class="alert alert-success">
- {{ session()->get('success') }}
- </div><br />
- @endif
- @if(session()->get('error'))
- <div class="alert alert-danger">
- {{ session()->get('error') }}
- </div><br />
- @endif
- <a href="{{ route('games.create')}}" class="btn btn-success">ADD</a>
- Стъпка 6. Работим по Controller-а
- Проверяваме дали единият потребител може само да добавя, а другият и да редактира и да изтрива.
- http://127.0.0.1/laravel8/public/games
- Към момента само е скрито показването на бутоните за редактиране и изтриване. Необходимо е и поставянето на проверки в кода на контролера, за да няма възможност за пробив в сигурността.
- Отваряме:
- \xampp\htdocs\laravel8\app\Http\Controllers\GameController.php
- Добавяме:
- public function edit($id)
- {
- if(auth()->user()->isAdmin != 1)
- return redirect('/games')->with('error', 'You are not admin!');
- $game = Game::findOrFail($id);
- return view('edit', compact('game'));
- }
- public function update(Request $request, $id)
- {
- if(auth()->user()->isAdmin != 1)
- return redirect('/games')->with('error', 'You are not admin!');
- $validatedData = $request->validate([
- 'name' => 'required|max:255',
- 'price' => 'required',
- ]);
- Game::whereId($id)->update($validatedData);
- return redirect('/games')->with('success', 'Game is successfully updated');
- }
- public function destroy($id)
- {
- if(auth()->user()->isAdmin != 1)
- return redirect('/games')->with('error', 'You are not admin!');
- $game = Game::findOrFail($id);
- $game->delete();
- return redirect('/games')->with('success', 'Game is successfully deleted');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement