PHP code example of din9xtr / laravel-enum-permissions
1. Go to this page and download the library: Download din9xtr/laravel-enum-permissions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
din9xtr / laravel-enum-permissions example snippets
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->json('permissions')->nullable();
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('permissions');
});
}
};
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('permissions', 64)->nullable();
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('permissions');
});
}
};
use Din9xtr\LaravelEnumPermissions\Contracts\PackagePermissionInterface;
use Din9xtr\LaravelEnumPermissions\Contracts\PermissionInterface;
enum PermissionEnum: string implements PermissionInterface
{
case CREATE = 'create';
case READ = 'read';
case UPDATE = 'update';
case DELETE = 'delete';
case EXPORT = 'export';
case IMPORT = 'import';
public static function all(): array
{
return array_column(self::cases(), 'value');
}
public static function getPackagePermissions(PackagePermissionInterface $package): array
{
return match ($package) {
PackageEnum::ADMIN => [
self::CREATE,
self::READ,
self::UPDATE,
self::DELETE,
self::EXPORT,
self::IMPORT,
],
PackageEnum::EDITOR => [
self::CREATE,
self::READ,
self::UPDATE,
self::EXPORT,
],
PackageEnum::VIEWER => [
self::READ,
self::EXPORT,
],
PackageEnum::CUSTOM => [],
};
}
}
use Din9xtr\LaravelEnumPermissions\Contracts\PackagePermissionInterface;
enum PackageEnum: string implements PackagePermissionInterface
{
case ADMIN = 'admin';
case EDITOR = 'editor';
case VIEWER = 'viewer';
case CUSTOM = 'custom';
}
use Din9xtr\LaravelEnumPermissions\Casts\PermissionsCast;
use Din9xtr\LaravelEnumPermissions\Contracts\HasPackagePermissionEnum;
use Din9xtr\LaravelEnumPermissions\Contracts\HasPermissionEnum;
use Din9xtr\LaravelEnumPermissions\Traits\HasPermissionsTrait;
use Illuminate\Database\Eloquent\Model;
class User extends Model implements HasPermissionEnum, HasPackagePermissionEnum
{
use HasPermissionsTrait;
protected string $permissionsAttribute = 'permissions';
protected $casts = [
'permissions' => PermissionsCast::class,
];
public static function permissionEnum(): string
{
return PermissionEnum::class;
}
public static function packageEnum(): string
{
return PackageEnum::class;
}
}
use Din9xtr\LaravelEnumPermissions\Casts\HexPermissionsCast;
protected $casts = [
'permissions' => HexPermissionsCast::class,
];
$user = User::find(1);
if ($user->hasPermission(PermissionEnum::CREATE)) {
// User can create.
}
$user->applyPackage(PackageEnum::ADMIN)->save();
$package = $user->detectPackage();