政策 returns 无论如何,此操作都是未经授权的
policy returns This action is unauthorized no matter what
我只是想向任何想要看到它的人展示一家公司
authServiceProvider:
Company::class => CompanyPolicy::class ,
'App\Models\Company' => 'App\Policies\CompanyPolicy',
公司政策
public function view( Company $company)
{
return true ;
}
公司控制器
public function __construct(CompanyRepository $companies)
{
$this->companies = $companies;
}
public function show(Company $company)
{
$this->authorize('view', $company);
return $this->companyRepository->show($company);
}
路由到控制器:
Route::apiResource('companies', 'CompanyController');
它总是return 此操作未经授权。为什么?
Company::class => CompanyPolicy::class,
行在您的 AuthServiceProvier
中是多余的,您必须将其删除。
举个例子:
假设我们有一个名为 SomeModel
的模型并且已经注册了它的策略。该策略具有 view
方法,用于检查当前用户是否能够调用 show 方法。
对于 api
的守卫,您可以创建一个 trait
,如下所示:
trait ApiTrait
{
/**
* Authorize a given action for the current user.
*
* @param mixed $ability
* @param mixed|array $arguments
* @return \Illuminate\Auth\Access\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function authorizeApi($ability, $arguments)
{
if (!request()->user('api')->can($ability, $arguments)) {
abort(403, 'This action is unauthorized.');
}
}
}
然后在你的控制器中使用它:
class ExampleController extends Controller
{
use ApiTrait;
public function show(SomeModel $something)
{
$this->authorize('view', $something);
return 'it workes';
}
}
注意你应该使用auth:api
的中间件来保护你的路由,否则你在ApiTrait
.
中调用can
方法时会得到错误代码500
我只是想向任何想要看到它的人展示一家公司 authServiceProvider:
Company::class => CompanyPolicy::class ,
'App\Models\Company' => 'App\Policies\CompanyPolicy',
公司政策
public function view( Company $company)
{
return true ;
}
公司控制器
public function __construct(CompanyRepository $companies)
{
$this->companies = $companies;
}
public function show(Company $company)
{
$this->authorize('view', $company);
return $this->companyRepository->show($company);
}
路由到控制器:
Route::apiResource('companies', 'CompanyController');
它总是return 此操作未经授权。为什么?
Company::class => CompanyPolicy::class,
行在您的 AuthServiceProvier
中是多余的,您必须将其删除。
举个例子:
假设我们有一个名为 SomeModel
的模型并且已经注册了它的策略。该策略具有 view
方法,用于检查当前用户是否能够调用 show 方法。
对于 api
的守卫,您可以创建一个 trait
,如下所示:
trait ApiTrait
{
/**
* Authorize a given action for the current user.
*
* @param mixed $ability
* @param mixed|array $arguments
* @return \Illuminate\Auth\Access\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function authorizeApi($ability, $arguments)
{
if (!request()->user('api')->can($ability, $arguments)) {
abort(403, 'This action is unauthorized.');
}
}
}
然后在你的控制器中使用它:
class ExampleController extends Controller
{
use ApiTrait;
public function show(SomeModel $something)
{
$this->authorize('view', $something);
return 'it workes';
}
}
注意你应该使用auth:api
的中间件来保护你的路由,否则你在ApiTrait
.
can
方法时会得到错误代码500