محسن بستان
5 سال پیش توسط محسن بستان مطرح شد
3 پاسخ

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

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

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

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

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

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

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

@ali.bayat


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 5 سال پیش مطرح شد
0

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

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

Auth::id()

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

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


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 5 سال پیش آپدیت شد
0

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

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

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

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


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

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