परिचय
जब आप एक वेब ऐप बना रहे होते हैं, तो अक्सर अलग‑अलग उपयोगकर्ताओं (users) को अलग अधिकार देने की ज़रूरत होती है — जैसे:
admin: पूरी साइट पर नियंत्रण
editor: कंटेंट लिखने, संपादित करने की अनुमति
guest (या सामान्य user): सीमित पहुंच — सिर्फ पढ़ने, प्रोफ़ाइल देखने आदि
इस तरह का नियंत्रण हम Role-Based Access Control (RBAC) के ज़रिए कर सकते हैं। Laravel में इसे लागू करने के दो सामान्य तरीके हैं:
खुद से बनाना (माइग्रेशन, मिडलवेयर, गेट्स / पॉलिसी)
पैकेज का उपयोग (जैसे Spatie’s Laravel Permission) — जो तेज़, सुरक्षित और बहु उपयोगी है
इस ब्लॉग में हम Spatie Laravel Permission पैकेज का उपयोग करेंगे क्योंकि यह लोकप्रिय है, अच्छी तरह टेस्टेड है और बड़ा समुदाय इसे उपयोग करता है।
आवश्यकताएँ
Laravel प्रोजेक्ट (प्रमाणीकृत लॉगिन सिस्टम — जैसे laravel/ui, breeze, jetstream या fortify)
Composer
MySQL / अन्य डेटाबेस
1. पैकेज इंस्टॉल करें
पहले Spatie का लाइब्रेरी इंस्टॉल करें:
composer require spatie/laravel-permission
उसके बाद, पब्लिश करें कॉन्फ़िग और माइग्रेशन:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
इससे कुछ माइग्रेशन फाइलें और config फ़ाइल बनेंगी।
फिर माइग्रेशन चलाएँ:
php artisan migrate
यह टेबल्स बनाएगा जैसे roles, permissions, model_has_roles, model_has_permissions, role_has_permissions आदि।
2. मॉडल सेटअप करें (User मॉडल)
User मॉडल को Spatie पैकेज के trait से सजाएँ ताकि roles & permissions उपयोग हो सकें। उदाहरण:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// बाकी कोड ...
}
यह HasRoles trait User मॉडल को role/permission संबंधी मेथड देती है जैसे assignRole(), hasRole(), givePermissionTo() आदि।
3. रोल एवं परमिशन बनाएँ (Seeder या कोड से)
आप रोल और परमिशन मैन्युअली बना सकते हैं, या एक Seeder बनाएँ:
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class RolePermissionSeeder extends Seeder
{
public function run()
{
// Roles बनाएं
$admin = Role::create(['name' => 'admin']);
$editor = Role::create(['name' => 'editor']);
$guest = Role::create(['name' => 'guest']);
// Permissions बनाएं (उदाहरण)
$permCreate = Permission::create(['name' => 'create posts']);
$permEdit = Permission::create(['name' => 'edit posts']);
$permDelete = Permission::create(['name' => 'delete posts']);
$permView = Permission::create(['name' => 'view posts']);
// रोल को परमिशन दें
$admin->givePermissionTo(Permission::all());
$editor->givePermissionTo(['create posts', 'edit posts', 'view posts']);
$guest->givePermissionTo(['view posts']);
}
}
Run seeder
php artisan db:seed --class=RolePermissionSeeder
4. यूज़र को रोल असाइन करना
अब आप किसी user को रोल दे सकते हैं — उदाहरण
$user = \App\Models\User::find(1);
$user->assignRole('admin');
// या multiple roles
$user->assignRole(['editor', 'guest']);
अगर आप किसी रोल को हटाना चाहते हैं
$user->removeRole('guest');
5. रूट / कंट्रोलर में मिडलवेयर द्वारा सुरक्षा
आप चाहते हैं कि कुछ रूट केवल admin को ही एक्सेस हो सकें। तो आप मिडलवेयर उपयोग कर सकते हैं:
// routes/web.php
Route::middleware(['auth', 'role:admin'])->group(function () {
Route::get('/admin/dashboard', [AdminController::class, 'index']);
});
अगर आप चाहते हैं कि admin और editor दोनों को एक्सेस मिले:
Route::middleware(['auth', 'role:admin|editor'])->group(function () {
Route::get('/editor-area', [EditorController::class, 'index']);
});
Spatie पैकेज में 'role:…' मिडलवेयर पहले से उपलब्ध होता है यदि आपने config में सही सेटअप किया है।
6. Blade में चेक करें — दृश्य स्तर पर नियंत्रण
Blade टेम्प्लेट में आप निम्न उपयोग कर सकते हैं:
@role('admin')
Settings
@endrole
@hasrole('editor')
Create Post
@endhasrole
@can('edit posts')
@endcan
इस तरह UI में भी केवल वैध लिंक ही दिखेगा।
7. उदाहरण: पोस्ट CRUD सुरक्षा
मान लीजिए आपके पास PostController है जिसमें CRUD ऑपरेशन हैं। आप इस तरह सुरक्षा लगा सकते हैं:
public function __construct()
{
$this->middleware('permission:view posts')->only(['index', 'show']);
$this->middleware('permission:create posts')->only(['create', 'store']);
$this->middleware('permission:edit posts')->only(['edit', 'update']);
$this->middleware('permission:delete posts')->only(['destroy']);
}
सेटअप
Spatie पैकेज इंस्टॉल
माइग्रेशन
User मॉडल में HasRoles trait
रोल और परमिशन बनाएँ
Seeder कोड
रोलों को परमिशन देना
यूज़र को रोल देना
assignRole, removeRole
उदाहरण
सुरक्षा (मिडलवेयर)
रूट सुरक्षा
कंट्रोलर में मिडलवेयर
दृश्य नियंत्रण (Blade)
@role, @can आदि