ایجاد یک سیستم مجوز (Permissions) در Laravel یکی از ویژگیهای مهم در ساخت اپلیکیشنهای پیچیده و مدیریتی است. در لاراول، این کار میتواند به راحتی با استفاده از پکیجهای آماده مانند Spatie/laravel-permission یا با استفاده از سیستم built-in لاراول انجام شود.
در اینجا نحوه ایجاد یک سیستم مجوز کامل با استفاده از پکیج Spatie/laravel-permission را توضیح میدهم.
📜 ایجاد سیستم مجوز (Permissions) در Laravel با استفاده از پکیج Spatie/laravel-permission
📦 نصب پکیج spatie/laravel-permission
برای استفاده از این پکیج ابتدا باید آن را نصب کنید. این پکیج به شما این امکان را میدهد که Roles و Permissions را به راحتی در پروژهی لاراول مدیریت کنید.
-
ابتدا پکیج را نصب کنید:
-
سپس فایلهای مایگریشن پکیج را منتشر کنید:
-
فایلهای مدل و config رو هم منتشر کنید:
🛠️ اجرای مایگریشنها
حالا باید مایگریشنها رو اجرا کنید تا جداول مربوط به roles, permissions و model_has_permissions ساخته بشه:
🧑💻 تنظیمات مدل User برای استفاده از Roles و Permissions
برای اینکه سیستم مجوز در مدل User کار کنه، باید مدل User رو تنظیم کنیم. برای این کار کافی است که از Spatie\Permission\Traits\HasRoles استفاده کنید.
در فایل app/Models/User.php:
📝 ایجاد Roles و Permissions
حالا میخواهیم Roles و Permissions را ایجاد کنیم.
1. ساخت Permissions
برای ایجاد Permissions (مجوزها) میتوانید از دستور Artisan استفاده کنید یا به صورت دستی در جدول permissions درج کنید.
مثلاً میتوانیم سه مجوز ساده ایجاد کنیم: create-post, edit-post, delete-post.
2. ساخت Roles
حالا که مجوزها ساخته شدند، میتوانیم Roles (نقشها) رو بسازیم. مثلاً، یک نقش برای مدیر و یک نقش برای نویسنده:
3. اختصاص دادن Permissions به Roles
حالا میتوانیم مجوزها رو به نقشها اختصاص بدیم. برای مثال، به مدیر همهی مجوزها و به نویسنده فقط مجوز create-post و edit-post داده میشود.
🧑💻 اختصاص دادن Role به یک کاربر
برای اختصاص دادن یک Role به یک کاربر، کافی است که از متد assignRole() استفاده کنید. مثلاً، برای اختصاص دادن نقش admin به یک کاربر:
📝 چک کردن دسترسیها
پس از ایجاد Roles و Permissions و اختصاص دادن آنها به کاربران، میتوانید به راحتی دسترسیهای مختلف کاربران رو بررسی کنید.
1. چک کردن اینکه کاربر نقش خاصی دارد
2. چک کردن اینکه کاربر یک Permission خاص را دارد
3. چک کردن اینکه کاربر چندین مجوز را دارد
🔐 استفاده از Middleware برای محافظت از روتها
شما میتوانید از middleware برای محافظت از روتها استفاده کنید تا فقط کاربرانی که مجوز خاصی دارند، به آنها دسترسی داشته باشند.
برای مثال، برای محافظت از روتها و دسترسی فقط به کاربران با نقش admin:
یا میتوانید به طور مستقیم از مجوزها استفاده کنید:
🔥 مثال کامل استفاده از Roles و Permissions در لاراول
ساخت یک Route برای مدیریت پستها (فقط برای نویسندگان و مدیران)
در اینجا کاربرانی که نقش admin یا writer دارند میتوانند به روت /posts دسترسی پیدا کنند.
💡 جمعبندی
با استفاده از پکیج Spatie/laravel-permission، به راحتی میتوانید سیستم مجوز (Permissions) و نقشها (Roles) را در لاراول پیادهسازی کنید. این سیستم به شما این امکان را میدهد که امنیت دسترسی به قسمتهای مختلف برنامه را به طور دقیق و آسان کنترل کنید.
اگر نیاز به اضافه کردن ویژگیهای پیچیدهتری مثل مجوزهای پویا (dynamic permissions) یا ساخت API با کنترلهای دسترسی پیشرفته دارید، میتوانید از این روشهای پایهای برای گسترش پروژه استفاده کنید. اگر سوالی داشتید یا نیاز به توضیح بیشتر دارید، حتماً بپرسید! 😎