netsells/hash-model-ids

动态创建一个 Eloquent 模型 id 值的哈希值,以避免暴露记录的实际数据库 id。

v2.0.0 2024-03-28 09:25 UTC

This package is auto-updated.

Last update: 2024-08-28 10:53:12 UTC


README

动态创建一个 Eloquent 模型 id 值的哈希值,以避免暴露记录的实际数据库 id。

功能

use Netsells\HashModelIds\HashesModelIdsTrait;

class Model extends BaseModel
{
    use HashesModelIdsTrait;
}

在 Eloquent 模型中使用 HashesModelIdsTrait 来启用以下功能

  • 访问模型的哈希 id 值: $model->hashed_id
  • 通过一个哈希 id 数组或单个哈希 id 过滤模型
    • Model::whereHashedId($hashedId)
    • Model::whereHashedIds($hashedIds)
  • 使用模型绑定其哈希 id 定义路由
    Route::get('models/{model}', function (Model $model) {
        return $model;
    });
    
    
    $url = url("models/$model->hashed_id");
  • 在表单请求类中使用自定义规则检查模型是否存在,可选地包括额外的链式约束
    public function rules()
    {
        return [
            'hashed_id' => [
                ExistsWithHashedIdRule::make(Model::class)
                    ->where(function ($query) {
                        $query->where('type', 'test');
                    })
                    ->where('foo', 'bar'),
            ],
        ];
    }

安装

使用以下命令安装包

composer require netsells/hash-model-ids

发布包配置文件

php artisan vendor:publish --tag=hash-model-ids-config

可选地,在 .env 中设置 HASH_MODEL_IDS_SALT

翻译

发布包翻译文件

php artisan vendor:publish --tag=hash-model-ids-lang

开发

有时,在开发过程中,处理哈希 id 可能会很尴尬。在环境文件中将 HASH_MODEL_IDS_ENABLED=false 设置为启用使用(可配置的)前缀版本的实际模型 id 而不是默认的哈希版本。

测试

./vendor/bin/phpunit