laravel – 自分で作成したアプリにアクセス制限

前回の Breeze を使えば、自分で作成したアプリにミドルウェアでアクセス制限ができるようです。

前回作成したものを一部変更すればいいのではないかと思います。

Routing

まずは routing を修正。


Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
    //以下を追加
    Route::get('/', [ImageController::class, 'top'])->name('pages.top');
    Route::get('/create', [ImageController::class, 'create'])->name('pages.create');
    Route::post('/store', [ImageController::class, 'store'])->name('pages.store');
    Route::get('/alldata', [ImageController::class, 'alldata'])->name('pages.alldata');
    Route::get('/category', [ImageController::class, 'category'])->name('pages.category');
    Route::get('/search', [ImageController::class, 'search'])->name('pages.search');
    Route::get('/delete/{id}', [ImageController::class, 'delete'])->name('pages.delete');
    Route::get('/update/{id}', [ImageController::class, 'update'])->name('pages.update');
    Route::get('/updatedata', [ImageController::class, 'updatedata'])->name('pages.updatedata');
});

ImageController.php


class ImageController extends Controller
{
	
	public function delete(Request $request)
	{
		$id = $request -> id ;
		Image::destroy($id);
		return view('pages.top');
	}
	
	public function update(Request $request)
	{
		$id = $request -> id ;	
		$datas = Image::where('id', $id) -> get();
		return view('pages.update', compact( 'datas'));
	}

	public function updatedata(Request $request)
	{
		$id = $request -> id ;
		$category = $request -> category ;
		$comment = $request -> comment ;
		Image::where('id', $id)
			->update(['category' => $category, 'comment' => $comment]);	
		return view('pages.top');
	}
		
	public function search(Request $request)
	{
		$keyword = $request -> keyword ;
		if( $keyword) 
		{
			$datas = Image::where('comment', 'LIKE', "%$keyword%")
				-> orderBy('hizuke', 'desc')
				-> get();
		}
		else
		{
			$datas = [] ;
		}		
		return view('pages.search', compact('datas'));
	}
	
	public function category(Request $request)
	{
		$category = $request -> category ;
		if( $category ) 
		{
			$datas = Image::where('category', $category)
				-> orderBy('hizuke', 'desc')
				-> get();
		}
		else
		{
			$datas = [] ;
		}
		return view('pages.category', compact('datas'));
	}
	
	public function alldata()
	{
		$datas = Image::orderBy('hizuke', 'desc')->get();
		return view('pages.alldata', compact('datas'));
	}

	public function top()
	{
		return view('pages.top');
	}
	
	public function logout()
	{
		Auth::logout();
	}
	
	public function create(Request $request)
	{
		return view('pages.create');
	}

	public function store(Request $request)
	{
		$img = $request->file('img_path');
		if (isset($img))
		{
			$stockdir = "uploads/".date("Y/m/d") ;
			$path = $img->store($stockdir,'public');
		}
		else
		{
			$path = null;
		}
		Image::create([
			'hizuke' => date("Y-m-d"),
			'category' => $request->category,
			'comment' => $request->comment,
			'img_path' => $path,
		]);
		return redirect()->route('pages.top');
	}
}

eloquent の素晴らしさ

eloquent って何だかわかりにくいと思っていましたが、多分慣れると素晴らしいと思います。

例えば、データベースからデータを削除するのは以下のようにするだけです。


		$id = $request -> id ;
		Image::destroy($id);

これはすごい。

ログアウト

オリジナルの dashboard のスクリプトをそのまま拝借しました。


	<form method="POST" action="{{ route('logout') }}" class="logout">
		@csrf
		<x-dropdown-link :href="route('logout')"
			onclick="event.preventDefault();
			this.closest('form').submit();">
			{{ __('ログアウト') }}
		</x-dropdown-link>
	</form>

アプリを動かしてみる

まずはログイン画面。
余計なものを取り除きました。

ログインすると

キーワードで検索します。

「美女」と入力して検索すると、

画像は小さくしてあり、それをクリックするとモーダルウィンドウが開きます。

もちろん、ログインしていないとトップ画面も表示されません。

また、ログアウトするとログイン画面にリダイレクトされます。

多分これでいいと思います。

後は、これが xserver 上で動くかどうかです。