私はこのようなゲートを作ります:
Gate::define('update-post', function ($user, Post $post) {
return $user->hasAccess(['update-post']) or $user->id == $post->user_id;
});
データベースを確認しましたが、更新投稿アクセスがあり、ユーザーIDは投稿と同じです。しかし、私は得た:
このアクションは許可されていません。
エラー。だから私はここでいくつかの間違いをしますか?ありがとう。
Form Requestdata validation (using php artisan make:request UpdateUserRequest
例えば)。
Form Request を使用してデータを検証している場合は、まず、正しいルールを適切に設定して、通過を許可することを確認します。これは、デフォルトでauthorize
に設定されるboolean
を返すfalse
メソッドで処理されます。
namespace App\Http\Requests\Users;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UpdateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
/**
* By default it returns false, change it to
* something like this if u are checking authentication
*/
return Auth::check(); // <------------------
/**
* You could also use something more granular, like
* a policy rule or an admin validation like this:
* return auth()->user()->isAdmin();
*/
}
public function rules()
{
// your validations...
}
}
「authorize」メソッドでtrueを返すようにしてください
public function authorize()
{
return true;
}
私の場合、Gate::define(...)
で正しいチェックをしていませんでした
その関数のロジックを再確認してください
<?php
namespace App\Modules\UserManagement\Request;
use Illuminate\Foundation\Http\FormRequest;
use Response;
class UserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
public function rules()
{
$rules = [
'full_name' => 'required',
'email' => 'required|email',
'password' => 'required',
're_enter_password' => 'required'
];
return $rules;
}
}