مارک پلاس

تکنولوژی نوین اینترنتی

سیستم مجوز (Permissions) لاراول

دسته‌بندی‌ها

سیستم مجوز (Permissions) لاراول
سیستم مجوز (Permissions) لاراول

ایجاد یک سیستم مجوز (Permissions) در Laravel یکی از ویژگی‌های مهم در ساخت اپلیکیشن‌های پیچیده و مدیریتی است. در لاراول، این کار می‌تواند به راحتی با استفاده از پکیج‌های آماده مانند Spatie/laravel-permission یا با استفاده از سیستم built-in لاراول انجام شود.

در اینجا نحوه ایجاد یک سیستم مجوز کامل با استفاده از پکیج Spatie/laravel-permission را توضیح می‌دهم.


📜 ایجاد سیستم مجوز (Permissions) در Laravel با استفاده از پکیج Spatie/laravel-permission


📦 نصب پکیج spatie/laravel-permission

برای استفاده از این پکیج ابتدا باید آن را نصب کنید. این پکیج به شما این امکان را می‌دهد که Roles و Permissions را به راحتی در پروژه‌ی لاراول مدیریت کنید.

  1. ابتدا پکیج را نصب کنید:

bash
composer require spatie/laravel-permission
  1. سپس فایل‌های مایگریشن پکیج را منتشر کنید:

bash
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
  1. فایل‌های مدل و config رو هم منتشر کنید:

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

🛠️ اجرای مایگریشن‌ها

حالا باید مایگریشن‌ها رو اجرا کنید تا جداول مربوط به roles, permissions و model_has_permissions ساخته بشه:

bash
php artisan migrate

🧑‍💻 تنظیمات مدل User برای استفاده از Roles و Permissions

برای اینکه سیستم مجوز در مدل User کار کنه، باید مدل User رو تنظیم کنیم. برای این کار کافی است که از Spatie\Permission\Traits\HasRoles استفاده کنید.

در فایل app/Models/User.php:

php
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // اضافه کردن این خط به مدل User protected $fillable = [ 'name', 'email', 'password', ]; }

📝 ایجاد Roles و Permissions

حالا می‌خواهیم Roles و Permissions را ایجاد کنیم.

1. ساخت Permissions

برای ایجاد Permissions (مجوزها) می‌توانید از دستور Artisan استفاده کنید یا به صورت دستی در جدول permissions درج کنید.

مثلاً می‌توانیم سه مجوز ساده ایجاد کنیم: create-post, edit-post, delete-post.

php
use Spatie\Permission\Models\Permission; Permission::create(['name' => 'create-post']); Permission::create(['name' => 'edit-post']); Permission::create(['name' => 'delete-post']);

2. ساخت Roles

حالا که مجوزها ساخته شدند، می‌توانیم Roles (نقش‌ها) رو بسازیم. مثلاً، یک نقش برای مدیر و یک نقش برای نویسنده:

php
use Spatie\Permission\Models\Role; $admin = Role::create(['name' => 'admin']); $writer = Role::create(['name' => 'writer']);

3. اختصاص دادن Permissions به Roles

حالا می‌توانیم مجوزها رو به نقش‌ها اختصاص بدیم. برای مثال، به مدیر همه‌ی مجوزها و به نویسنده فقط مجوز create-post و edit-post داده می‌شود.

php
$admin->givePermissionTo(Permission::all()); // به مدیر همه مجوزها رو بدیم $writer->givePermissionTo(['create-post', 'edit-post']); // به نویسنده فقط دو مجوز

🧑‍💻 اختصاص دادن Role به یک کاربر

برای اختصاص دادن یک Role به یک کاربر، کافی است که از متد assignRole() استفاده کنید. مثلاً، برای اختصاص دادن نقش admin به یک کاربر:

php
$user = User::find(1); // پیدا کردن کاربر با ID برابر با 1 $user->assignRole('admin'); // اختصاص دادن نقش admin به کاربر

📝 چک کردن دسترسی‌ها

پس از ایجاد Roles و Permissions و اختصاص دادن آن‌ها به کاربران، می‌توانید به راحتی دسترسی‌های مختلف کاربران رو بررسی کنید.

1. چک کردن اینکه کاربر نقش خاصی دارد

php
$user->hasRole('admin'); // اگر کاربر نقش admin را داشته باشد، true برمی‌گرداند

2. چک کردن اینکه کاربر یک Permission خاص را دارد

php
$user->hasPermissionTo('create-post'); // اگر کاربر این مجوز را داشته باشد، true برمی‌گرداند

3. چک کردن اینکه کاربر چندین مجوز را دارد

php
$user->hasAnyPermission(['create-post', 'edit-post']); // بررسی اینکه آیا کاربر یکی از این مجوزها را دارد

🔐 استفاده از Middleware برای محافظت از روت‌ها

شما می‌توانید از middleware برای محافظت از روت‌ها استفاده کنید تا فقط کاربرانی که مجوز خاصی دارند، به آن‌ها دسترسی داشته باشند.

برای مثال، برای محافظت از روت‌ها و دسترسی فقط به کاربران با نقش admin:

php
Route::middleware(['role:admin'])->get('/admin/dashboard', function () { return view('admin.dashboard'); });

یا می‌توانید به طور مستقیم از مجوز‌ها استفاده کنید:

php
Route::middleware(['permission:create-post'])->post('/posts', [PostController::class, 'store']);

🔥 مثال کامل استفاده از Roles و Permissions در لاراول

ساخت یک Route برای مدیریت پست‌ها (فقط برای نویسندگان و مدیران)

php
Route::middleware(['role:admin|writer'])->get('/posts', function () { return Post::all(); });

در اینجا کاربرانی که نقش admin یا writer دارند می‌توانند به روت /posts دسترسی پیدا کنند.


💡 جمع‌بندی

با استفاده از پکیج Spatie/laravel-permission، به راحتی می‌توانید سیستم مجوز (Permissions) و نقش‌ها (Roles) را در لاراول پیاده‌سازی کنید. این سیستم به شما این امکان را می‌دهد که امنیت دسترسی به قسمت‌های مختلف برنامه را به طور دقیق و آسان کنترل کنید.

اگر نیاز به اضافه کردن ویژگی‌های پیچیده‌تری مثل مجوزهای پویا (dynamic permissions) یا ساخت API با کنترل‌های دسترسی پیشرفته دارید، می‌توانید از این روش‌های پایه‌ای برای گسترش پروژه استفاده کنید. اگر سوالی داشتید یا نیاز به توضیح بیشتر دارید، حتماً بپرسید! 😎

محتوای مرتبط

پست‌های مرتبط