ল্যারাভেলে অথেনটিকেশন যুক্ত করা সহজ। নতুন প্রজেক্ট তৈরি করার সময় আমাদের সাধারণত স্টার্টার কিট চুজ করতে দেয়। এই সময় আমরা লারাভেল ব্রিজ সিলেক্ট করে নিব। নিচে হার্ড ব্যবহার করে প্রজেক্ট তৈরি করার সময় ব্রিজ সিলেক্ট করার অপশনঃ
কমান্ড লাইন বা টার্মিনালেও অপশন পাওয়া যাবে। পূর্বে তৈরি কোন প্রজেক্টেও Laravel Breeze যুক্ত করতে পারব। তার জন্যঃ
composer require laravel/breeze --dev
php artisan breeze:install
ব্রিজ ইন্সটল করার পর ডেটাবেজ মাইগ্রেট করে নিব:
php artisan migrate
এরপর প্রয়োজনীয় npm প্যাকেজ গুলো ইন্সটল করে নিবঃ
npm install
ব্রিজ টেলউইন্ড সিএসস ব্যবহার করে এবং ভিট সার্ভার ব্যবহার করে এই টেলউইন্ড সিএসএস সার্ভ করে। তাই আমাদের ভিট সার্ভার রান করতে হবে। তার জন্য
npm run dev
ফাইনালি আমরা ল্যারাভেল প্রজেক্ট সার্ভ করতে পারবঃ
php artisan serve
হার্ড ব্যবহার করলে উপরের স্টেপ গুলো ফলো করতে হবে না। হার্ড সব কিছু আমাদের জন্য ম্যানেজ করবে। আমরা চাইলে লগিন, রেজিস্ট্রেশন ইত্যাদি করতে পারব।
এর আগে আমরা দেখেছি কিভাবে একটা নোট অ্যাপ তৈরি করা যায় ল্যারাভেলে। এবার ঐ নোট গুলো একজন ইউজারের আন্ডারে সেভ করব। ইউজার শুধু নিজের নোটই দেখতে পারবে। অন্য কারো নোট দেখতে পাবে না। আগের লেখাঃ ল্যারাভেলে একটা পূর্ণাঙ্গ CRUD অ্যাপ। এবারের প্রজেক্টের নাম দিলাম PrivateNote।
ইউজারের আন্ডারে নোট সেভ করা
আগের লেখাটি ফলো করে নোট মডেল ও অন্যান্য কোড লিখে নিতে হবে আগে। এরপর create_note_table মাইগ্রেশন ফাইলে ইউজার আইডি কলাম যোগ করিঃ $table->foreignId('user_id')->constrained()->onDelete('cascade');
Schema::create('notes', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->string('title');
$table->longText('note');
$table->timestamps();
});
এরপর ডেটাবেজ মাইগ্রেট করে নেই।
php artisan migrate:refresh
ফলে ডেটাবেজের note টেবিল user_id কলাম যোগ হবে। এখানে constrained()->onDelete(‘cascade’) এর মানে হচ্ছে যদি নির্দিষ্ট ইউজার ডিলিট হয়ে যায়, তাহলে তার সকল নোট ডিলিট হয়ে যাবে। উপরের কমান্ড রান করলে পূর্বের সব নোট ডিলেট হয়ে যাবে। নোট ডিলেট না করেও ডেটাবেজ মাইগ্রেট করা যায়। ঐটা আরেকটু কমপ্লিকেটেড হওয়ায় আপাতত এই লেখায় স্কিপ করছি।
রিলেশনশিপ সেট করা
মডেল ফাইলে রিলেশন সেট করতে হবে আমাদের।
App>Models> User.php ফাইলে নিচের মেথড যোগ করিঃ
public function notes()
{
return $this->hasMany(Note::class);
}
এর মানে হচ্ছে একজন ইউজারের আন্ডারে একের অধিক নোট থাকবে।
App>Models> Note.php ফাইলে নিচের মেথড যোগ করিঃ
public function user()
{
return $this->belongsTo(User::class);
}
এর মানে হচ্ছে একটা নোট একজন ইউজারের আন্ডারে থাকবে।
ইউজারের আন্ডারে নোট সেভ করাঃ
লগড ইন ইউজারের আন্ডারে নোট সেভ করার জন্য নিচের মত করে স্টোর মেথড লিখবঃ
public function store(Request $request){
$data = $request->validate([
'title' => ['required', 'string'],
'note' => ['required', 'string'],
]);
$user = Auth::user();
$note = $user->notes()->create([
'title' => $data['title'],
'note' => $data['note'],
]);
}
অথেনটিকেশন ইউজার নিয়ে কাজ করার জন্য use Illuminate\Support\Facades\Auth;
ফ্যাসাদ ইনক্লুড করে নিতে হবে।
শুধু মাত্র কারেন্ট ইউজারের নোট গুলো দেখানোঃ
public function index(){
$notes = Note::orderBy("created_at","desc")
->where('user_id', Auth::id())
->paginate(10);
return view("index", ['notes'=>$notes]);
}
যেন শুধু মাত্র লগডইন ইউজার নিজের নোট গুলো দেখতে পারে এবং অন্য কেউ যেন দেখতে না পারে, তার জন্য আমাদের NoteController এর Show, Edit, Update, Delete মেথড গুলো আপডেট করতে হবে।
show মেথডঃ
public function show(Note $note){
if ($note->user_id !== request()->user()->id) {
abort(403);
}
return view("single", ['note' => $note]);
}
edit মেথডঃ
public function edit(Note $note){
if($note->user_id !== request()->user()->id){
abort(403);
}
return view("edit", ['note'=>$note]);
}
update মেথডঃ
public function update(Request $request, Note $note)
{
if($note->user_id !== request()->user()->id){
abort(403);
}
$data = $request->validate([
'title' => ['required', 'string'],
'note' => ['required', 'string']
]);
$note->Update($data);
return to_route('note.show', $note);
}
delete মেথডঃ
public function destroy(Note $note)
{
if($note->user_id !== request()->user()->id){
abort(403);
}
$note->delete();
return to_route('note.index', $note);
}
হয়ে গেলো একটা প্রাইভেট নোট অ্যাপ।