php 如何防止用户使用用户ID访问其他用户数据?

6tdlim6h  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(135)

我做了一个链接

Route::get('/admin/edit/user/{user_id}', [UserController::class, 'editUser'])->name('edit.user');

这就是为什么当一个用户点击编辑时,他会看到https://0608sns.org/admin/edit/user/1789,他可以编辑他的个人资料,但如果该用户输入另一个id,如1790,他可以使用该用户的个人资料。那么,我该如何预防呢?

c86crjj0

c86crjj01#

您必须使用Policies来允许实体做某事或不做某事。
在您的示例中,您应该使用php artisan make:policy UserPolicy创建一个名为UserPolicy的策略,其内容应该是:

<?php
 
namespace App\Policies;
 
use App\Models\User;
 
class UserPolicy
{
    public function update(User $user, User $userToEdit): bool
    {
        return $user->id === $userToEdit->id;
    }
}

然后,在你的控制器中,你应该有这样的东西:

public function update(Request $request, int $user_id): RedirectResponse
{
    $userToEdit = User::findOrFail($user_id);

    $this->authorize('update', $userToEdit);

    // Do whatever you need to

    return redirect('/');
}

我可能错过了一些东西,这是从我的头顶,所以尝试一下,让我知道它是否有效。

6xfqseft

6xfqseft2#

实际上你只需要一个简单的Gate [政策也很好]但对于像这样的简单授权,我们更喜欢盖茨。点击这里https://laravel.com/docs/10.x/authorization#writing-gates

相关问题