我有这条路线:
Route::Resource('/additional_role_countries', 'AdditionalRoleCountryController');
在控制器中,我具有此授权:
class AdditionalRoleCountryController extends Controller
{
public function __construct() {
$this->authorizeResource(AdditionalRoleCountry::class, 'additional_role_countries');
}
}
最后我对模型有了这个策略:
class AdditionalRoleCountryPolicy extends AbstractAuthorization
{
use HandlesAuthorization;
public function __construct()
{
var_dump('je suis dans le construct de la policy');
}
/**
* Determine whether the user can view any additional role countries.
*
* @param Member $member
* @return mixed
*/
public function viewAny(Member $member)
{
//
}
/**
* Determine whether the user can view the additional role country.
*
* @param Member $member
* @param AdditionalRoleCountry $additionalRoleCountry
* @return mixed
*/
public function view(Member $member, AdditionalRoleCountry $additionalRoleCountry)
{
var_dump('titi');
return true;
}
/**
* Determine whether the user can create additional role countries.
*
* @param Member $member
* @return mixed
*/
public function create(Member $member)
{
return $this->isAuthorizedBranch($member);
}
}
我的问题:
对于POST
(=创建),一切运行良好。如有必要,它将发送403错误。
但要GET
(=视图)。它不起作用。它甚至从不执行__construct
方法。它直接返回 403 。
我不明白为什么。谢谢你的帮助。谢谢
编辑
我试图更改此内容:
$this->authorizeResource(AdditionalRoleCountry::class, 'additional_role_countries');
与此:
$this->authorizeResource(AdditionalRoleCountry::class);
现在看来,它适用于帖子和获取。这是否意味着第二个参数不是必需的?
答案 0 :(得分:1)
它不起作用,因为您将错误的路由参数传递给了authorizeResource
。
Route::resource('additional_role_countries')
生成以下路由参数
additional_role_country
但您正在通过
additional_role_countries
问题是Laravel找不到与additional_role_countries
相对应的模型,但仍运行can
检查,但默认情况下返回false(403)。
解决方案
删除第二个参数或将其更改为additional_role_country
应该可以解决问题。
$this->authorizeResource(AdditionalRoleCountry::class, 'additional_role_country');
$this->authorizeResource(AdditionalRoleCountry::class);
为什么它适合您的商店请求
如您所见,here Laravel并未不对方法index
,create
和store
使用第二个参数,而是使用了来自第一个参数的类名,在您的情况下为AdditionalRoleCountry
。