文档没有说清楚,张贴以防其他人遇到困难。用户模型、UserPolicy 和 UserController 的示例。
第一的,在AuthServiceProvider中添加Policy类。
AppProvidersAuthServiceProvider
/**
* The policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
User::class => UserPolicy::class,
];
第二,在控制器中使用 authorizeResources 将策略自动映射到 api 控制器。请参阅here 了解策略 -> 控制器映射到的内容
// AppHttpControllersUserController
use AppModelsUser;
use IlluminateHttpRequest;
use AppHttpRequestsStoreUserRequest;
use AppHttpRequestsUpdateUserRequest;
class UserController extends Controller
{
/**
* Create the controller instance.
*
* @return void
*/
public function __construct()
{
// Sets up user policy for this controller
$this->authorizeResource(User::class, 'user');
}
...
}
最后的,删除FormRequests 的授权部分
// AppHttpRequestsUpdateUserRequest
class UpdateUserRequest extends FormRequest
{
// DELETE the auth part below, otherwise it'd mess up using policies.
// I'm pretty sure this takes precedence over policies
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
//public function authorize()
//{
//return true;
//}
}
现在,在 UserPolicy 中设置的策略将用作用户控制器的身份验证守卫。