رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چند سوال در تعریف ability
#1
سلام دوستان

وقتی متد boot رو بصورت زیر تعریف میکنیم:
public function boot()
{
   $this->registerPolicies();
    
   Gate::define('update-post', function ($user, $post) {
       return $user->id == $post->user_id;
   });
}
چند سوال پیش میاد:
1- دو پارامتر user$ و post$ از کجا برای این تابع ارسال شدن؟
2- اگه بجای مدل Post با مدل Comment کار کنیم بازم میشه به همین روش کار کرد؟
3- موقع کار با مدل comment برای نام ثابت باید update-comment بنویسیم؟
4- موقع حذف کردن یک مدل باید delete-post بنویسیم؟

متشکرم
پاسخ
تشکر شده توسط:
#2
سلام
1-دو تا پارامتر موقعی که این ability رو فراخوانی می کنید مقدار دهی میشه اینجارو ببینید:
if (Gate::allows('update-post', $post)) {
    // The current user can update the post...
}

شما باید یک Instance از Post رو بهش بدین البته توی این روش خود لاراول به طور اتوماتیک یک نمونه از کاربر احرازهویت شده جاری رو هم می گیره که نیازی نیست در متد allows نوشته بشه

2-بله میشه برای هر کدوم کافیه یک ability به همین صورت تعریف کنید و مثلا update-comment نامگزاری کنید

3- اسامی دلخواه هست اجباری نیست که حتما delete-post باشد ولی خب بهتره اسامی نشان دهنده عملی که می خواهید باشد در کل برای هر عمل میتونید یک ability تعریف کنید و در صورتی که تعدادشون زیاد میشه میتونید از Policy هم استفاده کنید که هردو روش در آموزش های همین بخش کار شده است و میتونید بهشون یه نگاهی بندازید
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



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




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