تالار گفتمان nCIS.ir

نسخه‌ی کامل: چند تا سوال در مورد Authorization
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
برای تعریف یک ability گفته شده که باید از کد زیر استفاده بشه تا یکی جدید ایجاد بشه
$gate->define('update-post', function ($user, $post) {
            return $user->id === $post->user_id;
       });

آیا برای هر مورد دیگه ای یه همچین چیزی نوشته میشه؟ منطور از update-post یه کالومن از جدول مثلا posts تو دیتابس هستش؟ که یک یا صفر هستش؟

وقتی که این داره چک میشه :
    $post = Post::find($id);
    if (Gate::denies('update-post', $post)){
       abort(403);
   };

اینجا چه اتفاقی می افته؟ چطوری تشخیص میده؟

الان اون خط رو میشه یعنی اینطوری هم نوشت:

    $post = Post::find($id);
$can_edit = $this->authorize('update-post', $post);
if($can_edit){}
نقل قول: آیا برای هر مورد دیگه ای یه همچین چیزی نوشته میشه؟ منطور از update-post یه کالومن از جدول مثلا posts تو دیتابس هستش؟ که یک یا صفر هستش؟

بله برای عمل crud که نیاز به سطح دسترسی دارید باید ability تعریف کنید که بهتره از کلاس های Policy استفاده کنید

نقل قول: اینجا چه اتفاقی می افته؟ چطوری تشخیص میده؟
وقتی از کلاس Gate استفاده میکنی خب نام ability رو بهش میدی اون هم به این صورت متوجه میشه کاربر جاری آیا به این رکورد دسترسی داره یا نه اگه نه بهش خطای 403 رو بده

نقل قول: الان اون خط رو میشه یعنی اینطوری هم نوشت:
بله اگه تو کنترلر باشی و کنترلرت از کنترلر base ارث برده باشه میتونی از متد authorize هم استفاده کنی کلا به چند روش میتونی اینکارو انجام بدی
پس الان ما باید یه کالومن به همون اسم تو جدول باید داشته باشیم اگه مقدار اون یک بود یعنی دسترسی داره و اگر صفر کردیم مقدارش رو تو جدول یعنی دسترسی نداره؟

کلاس Policy رو میشه تو یه مقاله کوچیک آموزش بدید؟
نه دیگه update-post فقط یه اسمه داخل anonymous function اومدیم گفتیم که فیلد کلید خارجی user_id تو جدول posts با فیلد رفرنسش تو جدول users که Id هست باید برابر باشه یعنی در اینصورت فقط کاربری که مطلب رو درج کرده حق ویرایش اونو داره و کاربرای دیگه دسترسی نخواهند داشت البته کاربر SuperAdmin مستثنی هست و همه دسترسی هارو داره
کلاس Policy خیلی فرقی با حالت بالا نداره فقط داخل یک کلاس ability ها تعریف می شوند واسه مواقعی که پروژه بزرگ میشه مرتب تر باشه و دیباگش راحت تر نیاز به آموزش نیست میتونید از مستندات مطالعه کنید