| name | bitmask-development |
| description | Work with bitmask flags in Laravel using the Transistor package, including creating enums, model setup, querying, and validation. |
Bitmask Development with Transistor
When to Use This Skill
Activate when:
- Creating or modifying bitmask flag enums
- Setting up models with bitmask columns
- Writing queries that filter by bitmask flags
- Adding validation for bitmask inputs
- Using bitmask conditionals in Blade templates
Creating Bitmask Flag Enums
Use php artisan make:bitmask-flags to generate enums interactively. The command will prompt for flag names.
Flags use bit-shifted values:
- Flag 1:
1 << 0 (1)
- Flag 2:
1 << 1 (2)
- Flag 3:
1 << 2 (4)
- Flag 4:
1 << 3 (8)
Example enum:
enum Permission: int
{
case Read = 1 << 0;
case Write = 1 << 1;
case Delete = 1 << 2;
case Admin = 1 << 3;
}
Model Configuration
Add the trait and cast to your model:
use Gksh\Transistor\Casts\BitmaskCast;
use Gksh\Transistor\Concerns\HasBitmaskScopes;
class User extends Model
{
use HasBitmaskScopes;
protected function casts(): array
{
return [
'permissions' => BitmaskCast::class,
];
}
}
Cast size options: tiny, small, medium, or default (32-bit).
Migration Examples
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->bitmask('permissions');
$table->tinyBitmask('settings');
$table->smallBitmask('preferences');
$table->mediumBitmask('features');
});
Query Scope Examples
Filter records by bitmask flags:
User::whereHasBitmaskFlag('permissions', Permission::Admin)->get();
User::whereHasAllBitmaskFlags('permissions', [Permission::Read, Permission::Write])->get();
User::whereHasAnyBitmaskFlag('permissions', [Permission::Admin, Permission::Delete])->get();
User::whereDoesntHaveBitmaskFlag('permissions', Permission::Admin)->get();
User::whereDoesntHaveAnyBitmaskFlag('permissions', [Permission::Admin, Permission::Delete])->get();
Validation Examples
In a Form Request:
use Gksh\Transistor\Rules\ValidBitmask;
public function rules(): array
{
return [
'permissions' => ['required', new ValidBitmask],
'permissions' => ['required', new ValidBitmask(Permission::class)],
'permissions' => ['required', 'bitmask:'.Permission::class],
];
}
Blade Directive Examples
Check flags in Blade templates:
@hasBitmaskFlag($user->permissions, Permission::Admin)
<p>User is an admin</p>
@endhasBitmaskFlag
@hasAnyBitmaskFlag($user->permissions, [Permission::Read, Permission::Write])
<p>User can read or write</p>
@endhasAnyBitmaskFlag
@hasAllBitmaskFlags($user->permissions, [Permission::Read, Permission::Write])
<p>User can read AND write</p>
@endhasAllBitmaskFlags
Inspecting Bitmask Values
Use the inspect command to visualize flags:
php artisan bitmask:inspect Permission
php artisan bitmask:inspect Permission 7
This displays a table with case names, decimal values, and binary representation with colored bits.
Working with Bitmask Objects
The cast returns a Gksh\Bitmask\Bitmask object:
$user = User::find(1);
$user->permissions->has(Permission::Admin);
$user->permissions->value();