📜  在 laravel 中受保护的 gaurded - PHP (1)

📅  最后修改于: 2023-12-03 15:23:12.209000             🧑  作者: Mango

在 Laravel 中受保护的 Guarded

在 Laravel 中,Guarded 是一个属性,它允许你定义不可被批量赋值的字段。Guarded 可以使你的应用程序更加安全,因为它可以防止用户提交数据中包含敏感字段。

Guarded 的基本用法

默认情况下,在 Laravel 的 Eloquent 模型中,所有字段都是可被批量赋值的。这样一来,如果用户提交了包含敏感数据的表单,这些敏感数据就会被自动保存到数据库中,从而降低了应用程序的安全性。

为了防止这种情况的发生,你可以在 Eloquent 模型中定义 Guarded 属性:

class User extends Model
{
    protected $guarded = ['id', 'password'];
}

在这个例子中,我们定义了一个 User 模型,并将其 $guarded 属性设置为一个包含 id 和 password 字段的数组。这意味着这些字段不能被批量赋值。

现在,如果用户提交一个包含 id 和 password 字段的表单,这些字段就不会被保存到数据库中。

Guarded 和 Fillable 的区别

Fillable 和 Guarded 都是 Eloquent 模型的属性,它们都用于定义哪些字段可以被批量赋值。

但是它们之间还是有一些区别:

  • Fillable 允许你定义哪些字段可以被批量赋值,而 Guarded 则定义哪些字段不可以被批量赋值。
  • Fillable 属性通常用在白名单模式中,Guarded 则通常用在黑名单模式中。
使用 Tips

以下是一些 Guarded 常用的使用技巧:

1. Guarded 的默认值

如果你没有设置 $guarded 属性,那么所有的字段都会被自动设置为可被批量赋值。

2. 保护主键字段

通常情况下,你应该将主键字段设置为 $guarded 。因为如果一个用户提交了一个包含 id 字段的表单,那么这个用户就有可能恶意地修改或删除该记录。

3. Guarded 可以接收一个空数组

当你想禁用所有的批量赋值时,你可以将 $guarded 属性设置为空数组:

class User extends Model
{
    protected $guarded = [];
}
4. 在控制器中使用 Guarded

可以在控制器中为 Eloquent 模型设置 $guarded 属性:

class UserController extends Controller
{
    public function store(Request $request)
    {
        $user = new User;

        $user->fill($request->all())->save(); // 不受 Guarded 属性限制

        $user->update($request->all()); // 受 Guarded 属性限制
    }
}

在这个例子中,我们使用 fill 方法将 $request 对象中的所有字段设置为可被批量赋值。这种方式不受 Guarded 属性的限制。

但是,如果我们使用 update 方法,就会受到 Guarded 属性的限制。

总结

Guarded 属性允许你指定哪些字段不能被批量赋值。这可以提高应用程序的安全性,因为它可以防止用户在表单中提交敏感数据。

通过掌握 Guarded 的使用技巧,你可以更好地保护你的应用程序,使其更加健壮和安全。