رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چند تا سوال در مورد Authorization
#1
برای تعریف یک 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){}
پاسخ
تشکر شده توسط:
#2
نقل قول: آیا برای هر مورد دیگه ای یه همچین چیزی نوشته میشه؟ منطور از update-post یه کالومن از جدول مثلا posts تو دیتابس هستش؟ که یک یا صفر هستش؟

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

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

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



پاسخ
تشکر شده توسط:
#3
پس الان ما باید یه کالومن به همون اسم تو جدول باید داشته باشیم اگه مقدار اون یک بود یعنی دسترسی داره و اگر صفر کردیم مقدارش رو تو جدول یعنی دسترسی نداره؟

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



پاسخ
تشکر شده توسط:
#5
کلاس Policy خیلی فرقی با حالت بالا نداره فقط داخل یک کلاس ability ها تعریف می شوند واسه مواقعی که پروژه بزرگ میشه مرتب تر باشه و دیباگش راحت تر نیاز به آموزش نیست میتونید از مستندات مطالعه کنید
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان