🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ امید غلامی
ایجاد مجوز دانلود فاکتور
جامعه لاراول ایجاد شده در ۱۷ مرداد ۱۳۹۹

تا الآن اگر کسی لاگین کرده باشه علاوه بر فاکتور سفارشات خودش فاکتور سفارشات بقیه کاربرارو فقط با وارد کردن id هایی که میتونه حدس بزنه در ادامه urlمیتونه دانلود کنه...چطور از این پیشگیری کنیم به صورتی که هر کاربر فقط بتونه فاکتورهای مربوط به سفارشات خودش رو دانلود کنه؟

من این مورد رو با تغییر متد show در InvoiceController به شکل زیر مدیریت کردم.

public function show(Order $order)
    {
        $user=Auth::user();
        $user_orders=$user->orders;
        if(!$user_orders->contains($order)){
            return back()
        ->with('error', __('messages.Illegal invoice request')); 
        }
        return $order->downloadInvoice();
    }

سفارشهای کاربر وارد شده رو گرفتم و چک کردم سفارش ارسال شده به این متد در سفارش‌های کاربر موجوده یا نه.
در صورتی که موجود نباشه ی error  برمیگردونم.
روش بهینه‌تری هست؟ نیازی به ایجاد Exception وجود داره؟

امید غلامی ۱۷ مرداد ۱۳۹۹، ۰۷:۰۳

سلام .. روشی که شما استفاده کردید هم پاسخگو هستش ولی بهینه نیست .. بهترین مورد برای اینکار استفاده از Policy‌های لاراول هستش ... با استفاده از Policy لاراول میتونید به صورت کامل این مورد رو چک کنید ... در آپدیت‌های دوره این مورد اضافه خواهد شد.

https://laravel.com/docs/7.x/authorization

مهرداد سامی ۱۹ مرداد ۱۳۹۹، ۱۲:۰۱