【问题标题】:Data masking in laravel 6laravel 6 中的数据屏蔽
【发布时间】:2020-03-10 14:28:50
【问题描述】:

如何在 laravel Blade 输出之前屏蔽某些输入?我在 App\helpers.php 中创建了一个函数来屏蔽电子邮件 ID,同时在刀片中输出它。由于我有会员网站,因此字符掩码将根据用户的特定条件应用。

function mask_email($email, $masks = 15) {
    $array = explode("@", $email);
    $string_length = strlen($array[0]);
    if ($string_length < $masks)
        $masks = $string_length;
    $result = substr($array[0], 0, -$masks) . str_repeat('x', $masks);
    return $result."@".$array[1];
}

有没有比我正在做的更有效的方法?

【问题讨论】:

    标签: php laravel data-masking


    【解决方案1】:

    1) 屏蔽

    所以我假设您尝试做的是将@ 之前的每个字符替换为x

    您可以使用 Str 辅助类来做到这一点

    $prefix       = Str::before($user->email, '@');
    $replacement  = str_repeat('x', strlen($prefix));
    $domain       = Str::after($user->email, '@');
    $masked_email = $replacement . '@' . $domain;
    

    2) 演示文稿

    Laracasts/Presenter 是您可能会发现有用的一个方便的包,它充当模型的表示层。

    User 模型为例,您可以在UserPresenter 中执行类似的操作

    namespace App\Presenters;
    
    use Laracasts\Presenter\Presenter;
    
    class UserPresenter extends Presenter
    {
        public function maskedEmail()
        {
            $prefix       = Str::before($user->entity->email, '@');
            $replacement  = str_repeat('x', strlen($prefix));
            $domain       = Str::after($user->entity->email, '@');
            $masked_email = $replacement . '@' . $domain;
    
            return $masked_email ;
        }
    }
    

    如果您要呈现给定用户的电子邮件,您可以在刀片模板中执行此操作:

    {{ $user->present()->maskedEmail }}
    

    3) 抽象演示者

    如果您有多个演示者使用相同的方法,您可能需要考虑像这样创建AbstractPresenter

    AbstractPresenter.php

    namespace App\Presenters;
    
    use Laracasts\Presenter\Presenter;
    
    abstract class AbstractPresenter extends Presenter
    {
        public function maskedEmail()
        {
            ...
        }
    }
    
    
    namespace App\Presenters;
    
    use App\Presenters\AbstractPresenter;
    
    class AbstractPresenter extends AbstractPresenter
    {
    
    }
    
    

    【讨论】:

    • 因此,如果我想屏蔽另一个字段,比如 phone_number,那么使用这个演示者包,我将为此创建另一个函数。有没有其他方法可以创建一个函数并且它适用于我想要的每个字段?假设我在 API 中发送值,并且我想将响应中的一些字段作为掩码发送。我该怎么做? @spholt
    • 您可以将该功能保留在您的helpers.php 中,也可以使用您的maskedEmail() 方法创建一个AbstractPresenter,然后您的其他演示者可以扩展该方法。解决方案将取决于项目的复杂性,如果您的应用程序相当简单,这可能是最重要的。
    • 申请是会员制。根据成员资格,需要隐藏一些数据。 AbstractPresenter 怎么做?
    • 我已经用一个例子更新了我的答案,但它有点偏离原来的主题。它只是一个普通的 PHP 抽象类!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2018-06-01
    相关资源
    最近更新 更多