Laravel Packages

Mask Sensitive Eloquent Attributes on Retrieval in Laravel

Published
Mask Sensitive Eloquent Attributes on Retrieval in Laravel image

The Laravel Attribute Mask package by Fazle Rabbi automatically masks sensitive Eloquent model attributes when they are retrieved. This is useful when you need to display partial data, such as email addresses, phone numbers, or other sensitive information, without exposing the full values.

Main Features

  • Automatic masking of attributes on retrieval
  • Built-in support for email, phone, and text masking types
  • Configurable mask character and visibility settings
  • Global configuration or per-attribute rules
  • Auto-detection of common phone field names

Defining Maskable Attributes

To start using this package, you add the HasMaskedAttributes trait to your model and define which attributes should be masked using either a maskables() method or a $maskable property:

use Irabbi360\LaravelAttributeMask\Concern\HasMaskedAttributes;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasMaskedAttributes;
	
	  // Alternatively, use the property syntax:
	  protected array $maskable = ['email', 'phone'];

    protected function maskables(): array
    {
        return ['email', 'phone'];
    }
}

Masking Behavior

Once configured, accessing masked attributes returns the masked version:

$user = User::find(1);

$user->email; // t**t@example.com
$user->phone; // 123****90

Retrieving Original Values

When you need to access the original unmasked value, use the getOriginal() method:

$user->getOriginal('email'); // test@example.com

Configuration Options

The published config file (config/attribute-mask.php) provides control over masking behavior that lets you customize it for your needs:

return [
    'enabled' => true,
    'mask_char' => '*',

    'email_masking' => [
        'show_domain' => true,
        'show_start' => 1,
        'show_end' => 1,
    ],

    'phone_masking' => [
        'show_start' => 3,
        'show_end' => 2,
        'patterns' => ['phone', 'phone_number', 'mobile', 'mobile_number'],
    ],

    'text_masking' => [
        'show_start' => 3,
        'show_end' => 3,
    ],
];

The patterns array under phone_masking allows the package to auto-detect phone fields by their attribute names.

Getting Started

Install the package via Composer:

composer require irabbi360/laravel-attribute-mask

Publish the configuration file:

php artisan vendor:publish --tag="attribute-mask-config"

For more information and source code, visit the Laravel Attribute Mask repository on GitHub.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
PhpStorm 2026.3 Adds an Agent Workspace and PHP 8.6 Support image

PhpStorm 2026.3 Adds an Agent Workspace and PHP 8.6 Support

Read article
Insert Middleware Before or After Existing Laravel Middleware image

Insert Middleware Before or After Existing Laravel Middleware

Read article
Laravel Herd 2: Coding Agents, Workspaces, and Cloud Deploys image

Laravel Herd 2: Coding Agents, Workspaces, and Cloud Deploys

Read article
Strict Request Input Casting in Laravel image

Strict Request Input Casting in Laravel

Read article
Prevent Duplicate File Uploads With Laravel Storage Dedupler image

Prevent Duplicate File Uploads With Laravel Storage Dedupler

Read article
Slow Job Alerts and Replica Commit IDs in Laravel 13.40 image

Slow Job Alerts and Replica Commit IDs in Laravel 13.40

Read article