1. Go to this page and download the library: Download althinect/enum-permission 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/ */
althinect / enum-permission example snippets
return [
// Path to your models
'models_path' => 'app/Models',
// Your User model
'user_model' => \App\Models\User::class,
// Classes that models should extend for discovery
'model_super_classes' => [
'Illuminate\Database\Eloquent\Model',
'Illuminate\Foundation\Auth\User',
],
// Permission definitions for policy methods
'permissions' => [
[
'method' => 'viewAny',
'arguments' => ['{{userModelName}} $user'],
'enum_case' => 'VIEW_ANY',
'enum_value' => '{{modelName}}.view-any'
],
// ... other permissions
],
// Auth guards to create permissions for
'guards' => [
'web',
'api',
],
// Whether to sync permission groups
'sync_permission_group' => false,
];
// In your controllers or services
if ($user->hasPermissionTo(PostPermission::CREATE)) {
// User can create posts
}
// In your policies
public function view(User $user, Post $post): bool
{
return $user->hasPermissionTo(PostPermission::VIEW);
}
namespace App\Permissions;
use Althinect\EnumPermission\Concerns\HasPermissionGroup;
enum UserPermission: string
{
use HasPermissionGroup;
case VIEW_ANY = 'User.view-any';
case VIEW = 'User.view';
case CREATE = 'User.create';
case UPDATE = 'User.update';
case DELETE = 'User.delete';
case RESTORE = 'User.restore';
case FORCE_DELETE = 'User.force-delete';
}
namespace App\Policies;
use App\Models\User;
use App\Permissions\UserPermission;
class UserPolicy
{
public function viewAny(User $user): bool
{
return $user->hasPermissionTo(UserPermission::VIEW_ANY);
}
public function view(User $user, User $model): bool
{
return $user->hasPermissionTo(UserPermission::VIEW);
}
// Additional methods for create, update, delete, etc.
}
// In UserPermission.php
public static function getPermissionGroup(): string
{
return str_replace('Permission', '', class_basename(static::class)); // Returns "User"
}
// Example of how permissions are stored with groups
[
'name' => 'User.view',
'guard_name' => 'web',
'group' => 'User' // <-- This groups all User permissions together
]