Laravel Larvel策略-将类作为变量传递给$user->;can()方法没有';行不通
我有一个动态模型识别的路线。换句话说,我将所需的模型作为参数,并在控制器中使用它。我的应用程序中有复杂的授权,我需要将模型类名作为变量传递给$user->can()方法以使用策略,但由于某些原因,它不起作用。这是我的密码: 政策:Laravel Larvel策略-将类作为变量传递给$user->;can()方法没有';行不通,laravel,Laravel,我有一个动态模型识别的路线。换句话说,我将所需的模型作为参数,并在控制器中使用它。我的应用程序中有复杂的授权,我需要将模型类名作为变量传递给$user->can()方法以使用策略,但由于某些原因,它不起作用。这是我的密码: 政策: public function view($user, Model $model) { return $user->model_id == $model_id; } public function create($user) { retu
public function view($user, Model $model) {
return $user->model_id == $model_id;
}
public function create($user) {
return $user->isAdmin();
}
控制器:
public function createModel($model) {
$model_class = $model . '::class';
if (Auth::user()->can('create', $model_class)) {
return $model_class::create();
}
return 'invalid_permissions';
}
如果我硬编码模型类名,它就可以工作。例如,如果我的模型是“Car”,我在控制器中放置:
if (Auth::user()->can('create', Car::class)) {
有人知道为什么会这样以及如何解决吗?我希望这是可能的,因为如果不是的话,我将不得不改变我的整个观念。
*注意:这是示例代码,不是我的实际类它是否会产生错误,或者只是在应该的时候创建一个模型?@jackel414它不会产生错误,它只是返回false(即未授权),我完全确定用户对该操作具有授权。您在动态示例中是否使用“Car”,上述政策代码是否来自您的CarPolicy?如果是这样,您是否在create方法中“dd”以确认代码实际上正在访问该方法?@jackel414是的,我在动态示例中使用了car,是的,我确定这是正确的策略,并且我在create方法中进行了dd(我使用了var_dump),但它没有访问它。当我将其设置为静态时,将“Car::class”作为策略的第二个参数,而不是将其作为变量传递,它会工作并授权PropertyLine 2什么是$model_id?