Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Larvel策略-将类作为变量传递给$user->;can()方法没有';行不通_Laravel - Fatal编程技术网

Laravel Larvel策略-将类作为变量传递给$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

我有一个动态模型识别的路线。换句话说,我将所需的模型作为参数,并在控制器中使用它。我的应用程序中有复杂的授权,我需要将模型类名作为变量传递给$user->can()方法以使用策略,但由于某些原因,它不起作用。这是我的密码:

政策:

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?