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

نسخه‌ی کامل: چند سوال در تعریف ability
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان

وقتی متد 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 بنویسیم؟

متشکرم
سلام
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 هم استفاده کنید که هردو روش در آموزش های همین بخش کار شده است و میتونید بهشون یه نگاهی بندازید