راکت
حل شده

مدیریت رابطه های تو در تو در لاراول

3 پاسخ

سلام به همگی.
دوستان فرض کنید من یک دیتابیس به شکل زیر دارم :

1 - کاربر
2 - شرکت ( که با کاربر رابطه داره )
3 - محصول ( که با شرکت رابطه داره )

حالا من مشکلم اینه که وقتی میخوام محصول رو برای مثال ویرایش کنم، فقط کاربر سازنده بتونه این کار رو بکنه. حتی برای مثال اگه تیبل چهارمی مثل زیر بهش اضافه بشه :

4 - ویژگی محصول ( که با محصول رابطه داره )

چه جوری میتونم کاری کنم که کاربری که لاگین کرده فقط بتونه داده خودش رو ادیت کنه یا کلا دسترسی داشته باشه ؟

آیا باید برای همه جداول یک user_id قرار بدم که با user رابطه داشته باشن ؟

@ali.bayat

ثبت پرسش جدید

پاسخ‌ها

3
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

یا به این شکل که استفاده کردید و یا از Policy ها استفاده کنید

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

اگر میخواید هر یک از کاربران یک شرکت بتونند محصولات ذیل اون شرکت رو ویرایش کنند که نیازی به فیلد اضافه نیست بر اساس روابطی که اشاره کردید.

ولی اگر فقط کاربری که یک محصول رو ایجاد کرده باید بتونه محصول رو ویرایش کنه یک راهش اینه که در جدول محصولاتتون یک فیلد ایجاد کنید بنام owner یا همون user_id که مشخص باشه ایجاد کننده این محصول کیه. بعدش قبل از هر گونه عملیاتی میتونید اون آیدی رو با آیدی کاربر لاگین کرده یعنی:

Auth::id()

چک کنید و اگر برابر نبود خطا بده.

اگر هم نوع دسترسی ها و حدود اختیارتون از این حالت بالا پیچیده تر و خاص ترهست پیشنهادم استفاده از پکیج های تنظیم نقش و سطح دسترسی مثل پکیج معروف bouncer هست:
https://github.com/JosephSilber/bouncer

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@mhyeganeh
خیلی ممنون از پاسخ. اما در واقع من نمیخوام userid رو تکرار کنم ! البته خودم با استفاده از راه حل زیر تونستم به نتیجه برسم اما خب گفتم شاید راه ساده تری هم باشه :

$productFeatures = ProductFeature::whereHas('product', function (Builder $q) {
            $q->whereHas('company', function (Builder $q) {
                $q->where('user_id', $this->user->id);
            });
})->latest()->get();

شاید پاسخ شما همین‌جا باشد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام