我在 Laravel 中进行了UserPolicy
,并尝试在控制器中使用$this->authorize(User::class)
,但是,当我访问UserController@index
时它总是返回 403 错误,如果我从UserController
中删除$this->authorize(User::class)
,则不存在此问题
app/Providers/AuthServiceProvider.php
namespace AppProviders;
use AppTransaction;
use AppPoliciesUserPolicy;
use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
User::class => UserPolicy::class
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
}
}
app/Policies/UserPolicy.php
namespace AppPolicies;
use AppUser;
use IlluminateAuthAccessHandlesAuthorization;
class UserPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can index users.
*
* @param AppUser $model
* @return mixed
*/
public function index(User $user)
{
return true;
}
}
应用程序/控制器
/用户控制器.php
namespace AppHttpControllers;
use AppUser;
use IlluminateHttpRequest;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$this->authorize(User::class);
$users = User::all();
return view('users.index', compact('users'));
}
}
app/Providers/AuthServiceProvider.php
中缺少use AppUser;
,感谢Mike Foxtech在评论中的答案
在 app/Providers/AuthServiceProvider 中.php添加 use App\User;