Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Pagina privata, amministratori e anagrafica

Proseguiamo nello sviluppo del nostro progetto basato su Laravel gestendo gestire pagina private, amministratori e anagrafica contenuti.
Proseguiamo nello sviluppo del nostro progetto basato su Laravel gestendo gestire pagina private, amministratori e anagrafica contenuti.
Link copiato negli appunti

Accesso alla pagina privata

Manteniamo lo stesso pattern di sviluppo utilizzato per il capitolo precedente e occupiamoci ora delle rotte:

Route::group(['middleware' => 'auth'], function () {
    Route::get('/my-page', [
        'uses' => 'FrontendController@getPrivatePage',
        'as' => 'private-page'
    ]);
    Route::get('/my-page/{bookId}', [
        'uses' => 'FrontendController@addFavouriteBook',
        'as' => 'favourite-book'
    ]);
});

Dedichiamoci quindi ai due nuovi metodi nel FrontendController:

public function getPrivatePage()
{
    return View::make('private');
}
public function addFavouriteBook($bookId)
{
    Auth::user()->books()->attach(Book::findOrFail($bookId));
    return redirect(route('private-page'));
}

Il primo metodo (getPrivatePage) non fa altro che mostrare una view dedicata, mentre il secondo metodo si occupa di ottenere l'oggetto Book dal database e di associarlo all'elenco dei libri preferiti dall'utente corrente.

Nelle view dobbiamo implementare due aspetti. Il primo è la creazione della pagina privata:

<div class="row">
    <div class="col-md-6">
        @include('shared.lastBook')
    </div>
    <div class="col-md-6">
        <h3>I miei libri preferiti</h3>
        <ul>
            @foreach(Auth::user()->books as $book)
                <li>{{ $book->title }} ({{ $book->pivot->created_at }})</li>
            @endforeach
        </ul>
    </div>
</div>

Il secondo è la modifica del view composer lastBook per mostrare un link dedicato all'aggiunta del libro tra i preferiti:

<ul>
    @foreach($lastBookList as $book)
        <li>
            {{ $book->title }}
            @if(Auth::check())
                <a href="{{ route('favourite-book', [ 'bookId' => $book->id ]) }}">
                    Aggiungi
                </a>
            @endif
        </li>
    @endforeach
</ul>

In questo caso, se tutto è stato implementato correttamente, potremmo aggiungere dei libri tra i preferiti. Ulteriori implementazioni potrebbero essere quelle di evitare l'inserimento di "doppioni" e implementare l'operazione inversa, ovvero l'eliminazione di un libro dai preferiti.

Amministratori e anagrafica contenuti

L'ultima specifica che manca è quella di negare l'accesso alle pagine di anagrafica per gli utenti non amministratori. A livello di configurazione di modelli abbiamo già svolto il lavoro aggiungendo una nuova colonna nel database. L'operazione rimanente è a livello di configurazione di rotte, per aggiungere un middleware dedicato a questo controllo personalizzato per le rotte del backoffice.

Creiamo quindi un nuovo middleware con il comando:

php artisan make:middleware Admin

e aggiungiamolo all'interno di app/Http/Kernel.php tra i middleware registrati.

Implementiamo quindi la sua logica basandoci sul middleware Authenticate già presente:

public function handle($request, Closure $next)
{
    if (!$this->auth->user()->admin) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login');
        }
    }
    return $next($request);
}

Come ultima operazione modifichiamo il file delle rotte, incapsulando le rotte di anagrafica in un nuovo gruppo dedicato a questo controllo:

Route::group(['middleware' => 'admin'], function () {
    Route::resource('author', 'AuthorController');
    Route::resource('book', 'BookController');
});

Se tutto è stato implementato correttamente, ora solo gli utenti amministratori potranno accedere alle rotte /author e /book.


Ti consigliamo anche