অসাধারণ! এবার আমি তোমাকে দেখাবো 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
➡️ এতে নিচের টেবিলগুলো তৈরি হবে:
rolespermissionsmodel_has_rolesmodel_has_permissionsrole_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 ইনটিগ্রেট করে দিতে পারি
তুমি কোনটা আগে চাও? আমি ধাপে ধাপে বাংলায় বুঝিয়ে দিবো!