سلام به همگی.
دوستان فرض کنید من یک دیتابیس به شکل زیر دارم :
1 - کاربر
2 - شرکت ( که با کاربر رابطه داره )
3 - محصول ( که با شرکت رابطه داره )
حالا من مشکلم اینه که وقتی میخوام محصول رو برای مثال ویرایش کنم، فقط کاربر سازنده بتونه این کار رو بکنه. حتی برای مثال اگه تیبل چهارمی مثل زیر بهش اضافه بشه :
4 - ویژگی محصول ( که با محصول رابطه داره )
چه جوری میتونم کاری کنم که کاربری که لاگین کرده فقط بتونه داده خودش رو ادیت کنه یا کلا دسترسی داشته باشه ؟
آیا باید برای همه جداول یک user_id قرار بدم که با user رابطه داشته باشن ؟
اگر میخواید هر یک از کاربران یک شرکت بتونند محصولات ذیل اون شرکت رو ویرایش کنند که نیازی به فیلد اضافه نیست بر اساس روابطی که اشاره کردید.
ولی اگر فقط کاربری که یک محصول رو ایجاد کرده باید بتونه محصول رو ویرایش کنه یک راهش اینه که در جدول محصولاتتون یک فیلد ایجاد کنید بنام owner یا همون user_id که مشخص باشه ایجاد کننده این محصول کیه. بعدش قبل از هر گونه عملیاتی میتونید اون آیدی رو با آیدی کاربر لاگین کرده یعنی:
Auth::id()
چک کنید و اگر برابر نبود خطا بده.
اگر هم نوع دسترسی ها و حدود اختیارتون از این حالت بالا پیچیده تر و خاص ترهست پیشنهادم استفاده از پکیج های تنظیم نقش و سطح دسترسی مثل پکیج معروف bouncer هست:
https://github.com/JosephSilber/bouncer
@mhyeganeh
خیلی ممنون از پاسخ. اما در واقع من نمیخوام userid رو تکرار کنم ! البته خودم با استفاده از راه حل زیر تونستم به نتیجه برسم اما خب گفتم شاید راه ساده تری هم باشه :
$productFeatures = ProductFeature::whereHas('product', function (Builder $q) {
$q->whereHas('company', function (Builder $q) {
$q->where('user_id', $this->user->id);
});
})->latest()->get();
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟