我授权这样的商店
public function store( Request $request)
{
$this->authorizeApi('store',JobPost::class, $request);
return $this->jobPostRepository->store($request);
}
在策略中,我的store方法看起来像这样
public function store(Request $request)
{
$user=auth()->user();
return ($user->company_id == $request->company_id)
&&($request->expiration_date->isAfter($request->publish_date))
&&($request->publish_date->isAfter(now()))
;
}
当我跑这个我得到
"Argument 1 passed to App\Policies\JobPostPolicy::store() must be an instance of Illuminate\Http\Request, instance of App\Models\User given, called in C:\xampp\htdocs\balatar1\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php on line 481"
当我在控制器中请求它的确定时,但是当我在策略上删除它时,它会返回一个null用户对象!这是为什么?
你犯了一些错误并错过了什么。
据我所知,你有一些公司,每个Company
有一些JobPost
s。
首先,你不应该在工作岗位请求的主体中传递你的公司ID,你的商店路线应该像https://example.com/company/{company_id}/job-post
那样你可以通过Laravel模型绑定捕捉公司模型!
所以你的路线应该定义为:
Route::group(['prefix' => 'company', 'as' => 'company.'], function () {
Route::group(['prefix' => '{company}'], function () {
Route::resource('job-post', 'JobPostController', ['parameters' => ['job-post' => 'jobPost']);
});
Route::resource('', 'ComapnyController', ['parameters' => ['' => 'company']);
}
你的控制器看起来像(我将在答案的第二部分解释JobPostRequest
):
class JobPostController extends Controller
{
public function store(JobPostRequest $request, Company $company)
{
$this->authorizeApi('store', [JobPost::class, $company]);
// the rest...
}
}
其次,您需要的是一个Request类来为您进行验证。
基于documentation首先你必须创建一个Request
类,然后它需要运行php artisan make:request JobPostRequest
然后你的职位发布请求应该是这样的:
class BaseRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|max:255',
'body' => 'required|max:65535',
];
}
}
您也可以在上面的类authorize
方法中执行您在策略中所做的操作,但不建议这样做。
第三,在你的政策(JobPostPloicy
)中,你必须检查当前登录的用户是否能够发布给定的$company
的工作。
附:请完全复制并通过您的课程所有依赖项,并花费更多时间来满足您的帖子。如果这很难写出你的问题,那么很难阅读,理解并正确回答。