1. Home
  2. Laravel
  3. Basic
  4. 5.Spatie Laravel Permission টিউটোরিয়াল

5.Spatie Laravel Permission টিউটোরিয়াল

অসাধারণ! এবার আমি তোমাকে দেখাবো Laravel Jetstream/Livewire প্রজেক্টে কীভাবে Spatie Laravel Permission প্যাকেজ দিয়ে Roles ও Permissions সিস্টেম তৈরি করতে হয় — একদম ধাপে ধাপে, বাংলায়, এবং পুরোপুরি প্রফেশনাল পদ্ধতিতে।


🛡️ Spatie Laravel Permission টিউটোরিয়াল — বাংলায় ধাপে ধাপে


🧩 ১. Spatie Laravel Permission ইনস্টল করা

✅ Step 1: Composer দিয়ে প্যাকেজ ইন্সটল করো

composer require spatie/laravel-permission

✅ Step 2: প্যাকেজের migration, model, config পাবলিশ করো

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

➡️ এটা নিচের ফাইলগুলো তৈরি করবে:

  • config/permission.php
  • এবং কিছু মাইগ্রেশন ফাইল

✅ Step 3: মাইগ্রেশন চালাও

php artisan migrate

➡️ এতে নিচের টেবিলগুলো তৈরি হবে:

  • roles
  • permissions
  • model_has_roles
  • model_has_permissions
  • role_has_permissions

👥 ২. Model এ Trait যুক্ত করা

User.php মডেল ফাইলে নিচের কোড যুক্ত করো:

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

🌱 ৩. ডিফল্ট Role গুলো Seed করা (Admin, Customer, Vendor)

✅ Step 1: Seeder তৈরি করো

php artisan make:seeder RoleSeeder

✅ Step 2: database/seeders/RoleSeeder.php এ কোড লিখো:

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;

class RoleSeeder extends Seeder
{
    public function run(): void
    {
        Role::create(['name' => 'admin']);
        Role::create(['name' => 'customer']);
        Role::create(['name' => 'vendor']);
    }
}

✅ Step 3: Seeder চালাও

php artisan db:seed --class=RoleSeeder

✅ এখন roles টেবিলে তিনটি role থাকবে।


🔗 ৪. ইউজারকে Role অ্যাসাইন করা

যেকোনো ইউজারে Role অ্যাসাইন করতে:

use App\Models\User;

$user = User::find(1);
$user->assignRole('admin'); // অথবা 'customer', 'vendor'

➡️ তুমি এটা Tinker, Controller, বা Register event থেকে করতে পারো।


🛡️ ৫. Middleware দিয়ে Route প্রোটেকশন

✅ Step 1: Route এ Middleware ব্যবহার করো

Route::group(['middleware' => ['role:admin']], function () {
    Route::get('/admin/dashboard', fn() => view('admin.dashboard'));
});

➡️ এতে শুধু admin রোল থাকলে এই রুট এক্সেস করা যাবে।

✅ Multiple Role:

Route::middleware(['role:admin|vendor'])->group(function () {
    Route::get('/manage-products', fn() => view('products.manage'));
});

🧠 ৬. Helper Method তৈরি করা (isAdmin, hasRole)

User.php মডেলে নিচের মতো helper method যুক্ত করো:

public function isAdmin()
{
    return $this->hasRole('admin');
}

public function isVendor()
{
    return $this->hasRole('vendor');
}

✅ এখন তুমি যেকোনো জায়গায় ব্যবহার করতে পারো:

@if(auth()->user()->isAdmin())
    <a href="/admin/dashboard">অ্যাডমিন ড্যাশবোর্ড</a>
@endif

🧪 Bonus: Permission System (Optional Advanced)

তুমি চাইলে নির্দিষ্ট পারমিশনও ব্যবহার করতে পারো:

use Spatie\Permission\Models\Permission;

Permission::create(['name' => 'edit product']);

$user->givePermissionTo('edit product');

if ($user->can('edit product')) {
    // কাজ করো
}

📌 Summary

কাজকমান্ড/পদ্ধতি
প্যাকেজ ইনস্টলcomposer require spatie/laravel-permission
মাইগ্রেশনphp artisan migrate
ট্রেইট যুক্ত করাuse HasRoles;
রোল সিড করাSeeder দিয়ে Role::create()
ইউজারে রোল অ্যাসাইন$user->assignRole('admin')
রুট প্রোটেক্টmiddleware(['role:admin'])
হেল্পার মেথডisAdmin(), hasRole('vendor')

তুমি যদি চাও, আমি এখন:

  • Register এর সময় অটো-রোল অ্যাসাইন করা শেখাতে পারি
  • Dashboard গুলো role অনুযায়ী আলাদা করে দিতে পারি
  • বা Filament Admin Panel এ Spatie Permission ইনটিগ্রেট করে দিতে পারি

তুমি কোনটা আগে চাও? আমি ধাপে ধাপে বাংলায় বুঝিয়ে দিবো!

How can we help?