Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 5 拉威尔的政策出奇地不起作用_Laravel 5_Acl_Policies - Fatal编程技术网

Laravel 5 拉威尔的政策出奇地不起作用

Laravel 5 拉威尔的政策出奇地不起作用,laravel-5,acl,policies,Laravel 5,Acl,Policies,要点很简单:我有一个UserPolicy方法来检查用户是否想要编辑他/她的个人资料。所以我喜欢这样: public function update(User $user, User $model) { return $user->id === $model->id; } protected $policies = [ // 'App\Model' => 'App\Policies\ModelPolicy', 'App\User' => 'App\

要点很简单:我有一个UserPolicy方法来检查用户是否想要编辑他/她的个人资料。所以我喜欢这样:

public function update(User $user, User $model)
{
    return $user->id === $model->id;
}
protected $policies = [
    // 'App\Model' => 'App\Policies\ModelPolicy',
    'App\User' => 'App\Policies\UserPolicy',
    'App\Post' => 'App\Policies\PostPolicy',
];
这在UserController中调用,如下所示:

public function edit(User $user)
{
    $this->authorize('update', $user);
    return view('users.edit')->with('user', $user);
}
PostController和PostPolicy中的一切都是一样的,这意味着检查用户是否可以编辑他/她自己的帖子,并且它可以工作。唯一的区别在于它们的签名,因为其中一个有两个用户(第一个是由Laravel注入的当前经过身份验证的用户,另一个是我要检查它的实例),另一个有上述自动注入的经过身份验证的用户和一个post实例。无论如何,它抛出:

Symfony \ Component \ HttpKernel \ Exception \ AccessDeniedHttpException

This action is unauthorized.
我试图
dd($model)
,但我得到了相同的异常。 为什么?提前谢谢

编辑

在我的AuthServiceProvider中,也已全部设置:

    protected $policies = [
    // 'App\Model' => 'App\Policies\ModelPolicy',
    Post::class => PostPolicy::class,
    User::class => UserPolicy::class,
];
my routes.php也是如此:

// Authentication Routes...
$this->post('login', 'Auth\LoginController@login')->name('login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->post('register', 'Auth\RegisterController@register')->name('register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

Route::get('/', 'HomeController@index')->name('home');

Route::resource('posts', 'PostController');

Route::resource('users', 'UserController')->except('index', 'create', 'store');
上面的一切都在这里被称为:

@if ($user->id == Auth::id())
    <a class="btn btn-link float-right p-0"
    href="{{ route('users.edit', Auth::id()) }}">

        <i class="fas fa-cog"></i>
        Edit profile
    </a>

    <br><br><br>
@endif
@if($user->id==Auth::id())



@恩迪夫
我自己给出了一个答案:我试图编写模型和策略的完整路径,而不是通过类的名称注册策略,它是有效的(当然,我不知道为什么)

我喜欢这样:

public function update(User $user, User $model)
{
    return $user->id === $model->id;
}
protected $policies = [
    // 'App\Model' => 'App\Policies\ModelPolicy',
    'App\User' => 'App\Policies\UserPolicy',
    'App\Post' => 'App\Policies\PostPolicy',
];

不管怎样,谢谢大家帮助我。希望有一天它能帮助别人

您是否将UserPolicy添加到身份验证服务提供商?是的,我添加了。我也跟着文档、互联网和一本书走了:(你能给我们看看你的
AuthServiceProvider
?如果你把它改成
$user->id=$model->id
,这行得通吗?不……同样的问题……它帮助了我的唯一解决方案。如果有人能解释一下为什么它会这样工作,那会很有帮助吗?