📜  laravel 模型保护 - PHP (1)

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

Laravel 模型保护 - PHP

在 Laravel 中,模型提供了一些简单而强大的工具,可以帮助您保护您的应用程序的数据。本教程将向您介绍 Laravel 中的模型保护,以及如何使用它来确保您的应用程序数据的安全性。

模型保护

模型保护是 Laravel 中一种保护模型数据的机制,它有几个常见的用例:

  • 防止 user_id 或其他关键字段的值被恶意篡改。
  • 防止用户尝试编写不安全的 SQL 查询,以修改或删除关键数据。

为了方便,Laravel Model 提供了几种模型保护方式:

保护字段

保护字段是 Laravel 中用于防止用户修改或填充模型中敏感信息的一种机制。这可以通过在模型上定义 $guarded 属性或 $fillable 属性来实现。

class User extends Model
{
    // 将该模型的所有字段都放开提交
    protected $guarded = [];

    // 只允许该模型的 name 和 email 字段可以被提交
    protected $fillable = ['name', 'email'];
}

设置其中一个即可达到保护字段的目的,当然,你也可以同时使用两个。

模型事件

模型事件是 Laravel 中允许您在模型保存、更新、删除等情况下触发自定义操作的机制。这可以用于在对数据进行操作之前或之前,对数据进行验证、清理或处理。

class User extends Model
{
    // 在保存用户数据之前触发的事件
    public static function boot()
    {
        parent::boot();

        static::saving(function ($user) {
            if (/* 是否需要验证此时用户输入的内容 */) {
                return false;
            }
        });
    }
}

需要在 boot 方法内定义相应逻辑,当事件触发时会执行其中的内容。

全局作用域

Laravel 允许您通过全局作用域来定义,并约束模型的查询数据。全局作用域允许您在每次查询该模型时,应用预定义的约束。

class User extends Model
{
    // 只有已经验证通过的用户才允许查询
    public function scopeValid($query)
    {
        return $query->where('validated', true);
    }
}

定义后,查询时只需调用该作用域方法即可:

User::valid()->get();

该方法会返回已验证用户。

授权

授权是 Laravel 中一种保护路由和控制器方法的机制,以确保仅授权用户可以使用这些路由。授权可用于限制应用程序中敏感的、具有危害性或需要访问权限的路由和控制器行为。

授权可以自定义创建,定义该授权策略后,你可以在路由中 middleware 调用该策略。

class UserPolicy
{
    public function update(User $user, User $model)
    {
        return $user->id === $model->id;
    }
}

定义后再路由中使用:

Route::put('/users/{user}', function (User $user, Request $request) {
    // 验证通过后才可更新用户信息
    $this->authorize('update', $user);

    // 更新用户信息
    $user->update($request->all());
});
拒绝未认证用户访问

Laravel 提供了一个 auth 中间件,通过在 routes/web.php 文件中使用这个中间件,可以非常容易地防止未认证的用户访问您的应用。

中间件会验证该用户是否已经登录,如果没有则会跳转到登录页面让其登录。

Route::get('/dashboard', function () {
    // 只有已认证的用户才能访问控制面板
    return view('dashboard');
})->middleware(['auth']);
结束语

您已经了解了 Laravel 模型保护的基本知识并学习了如何使用它来保护您的应用程序数据。本教程涵盖了保护字段、模型事件、全局作用域、授权和拒绝未认证用户访问。通过对这些工具的使用,您可以帮助确保您的代码的安全性和正确性。