nikan2010/accessible-resources

Manage user access to various resources with caching

v1.0.0 2025-05-03 09:01 UTC

This package is auto-updated.

Last update: 2025-05-04 04:14:41 UTC


README

این پکیج به شما اجازه می‌دهد دسترسی کاربران به منابع مختلف (مثل محصولات، دسته‌بندی‌ها و ...) را با استفاده از رابطه‌ی چندشکلی (polymorphic) و کش هوشمند مدیریت کنید.

✅ امکانات

  • پشتیبانی از چند مدل مختلف به‌صورت polymorphic (مثل Product, Category و ...)
  • ماکروی withAccessibleTo() برای فیلتر کردن داده‌ها در همه مدل‌ها
  • کش هوشمند برای افزایش کارایی
  • فایل تنظیمات برای تعریف مدل‌ها و نقش ادمین

🔧 نصب پکیج

۱. پکیج را داخل پوشه‌ی packages/accessible-resources در پروژه لاراول خود قرار دهید.

۲. فایل composer.json پروژه‌تان را ویرایش کرده و این قسمت را اضافه کنید:

"repositories": [
  {
    "type": "path",
    "url": "packages/accessible-resources"
  }
],

۳. نصب پکیج با composer:

composer require nikan2010/accessible-resources:@dev

⚙️ پیکربندی

برای انتشار فایل‌های تنظیمات و مهاجرت (migration):

php artisan vendor:publish --tag=accessible-resources
php artisan migrate

سپس فایل config/accessible-resources.php را ویرایش کنید:

'resources' => [
    'product' => \App\Models\Product::class,
    'category' => \App\Models\Category::class,
],

'admin_role' => 'admin',

🧩 استفاده

۱. افزودن Trait به مدل User

use AccessibleResources\Traits\HasAccessibleResources;

class User extends Authenticatable
{
    use HasAccessibleResources;
}

۲. اختصاص دسترسی

$user->accessibleResources(\App\Models\Product::class)->attach($productId);

۳. استفاده از ماکرو در کوئری‌ها

$orders = Order::query()->withAccessibleTo(
    auth()->user(),
    'product', // نام رابطه
    'product', // کلید تعریف‌شده در فایل config
    'product_id' // (اختیاری) برای روابط belongsTo
)->get();

📦 کش هوشمند

دسترسی کاربر برای هر منبع تا ۱ روز کش می‌شود. برای پاک‌سازی دستی کش:

$user->clearCachedAccessibleResourceIds(\App\Models\Product::class);

📃 مجوز استفاده

کد این پکیج آزاد است (MIT License) و می‌توانید آزادانه در پروژه‌های شخصی و تجاری استفاده کنید.