【问题标题】:Alter values of some columns before returning to user in Laravel sql server在 Laravel sql server 中返回用户之前更改某些列的值
【发布时间】:2018-03-15 08:44:35
【问题描述】:

我有一些表,每个表都有几列我们保存加密数据。我能够在将更新保存到数据库之前加密数据。但是我不知道在向用户显示何时运行选择查询之前如何解密它们的过程。

我使用 LARAVEL 5.4 作为前端。我已经这样做了,如果我遵循 elequent 模型来获取数据,但在查询构建器的情况下它会失败。

在向用户展示之前,有什么方法可以不使用 elequent 来更改或解密数据。我根据系统需要在很多地方使用选择查询。我不确定,但是这个问题可以通过在 laravel 中监听任何事件来解决吗?

所以,我不能手动编写解密函数来首先从数据库中获取行然后解密它们然后返回给用户。我的后端数据库是 SQL SERVER

谁能帮我解决这个问题。

【问题讨论】:

    标签: encryption laravel-5 sql-server-2012


    【解决方案1】:

    假设您有一个带有加密 body 值的 Post 模型。以下模型将在将数据返回给用户之前对其进行解密。

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        /**
         * Get the post's body.
         *
         * @param  string  $value
         * @return string
         */
        public function getBodyAttribute($value)
        {
            return decrypt($value);
        }
    }
    

    getBodyAttribute 是一个突变体。你可以阅读更多关于 mutators in the Laravel Docs.

    所以现在下面的代码将返回正文的解密值:

    $post = App\Post::find(1);
    
    $decryptedValue = $post->body;
    

    【讨论】:

    • 感谢您的回复。我已经这样做了,并且以这种方式进行,我得到了预期的输出。但这限制了我使用 elequont 模型。假设我使用 DB::table('posts')->where('id', 1)->first();。那么您的解决方案将无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多