PHP code example of eduardoribeirodev / base-policies

1. Go to this page and download the library: Download eduardoribeirodev/base-policies 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/ */

    

eduardoribeirodev / base-policies example snippets


return [
    // Namespace onde suas políticas serão criadas
    'namespace' => env('BASE_POLICIES_NAMESPACE', 'Policies'),

    // Caminho onde seus modelos estão localizados
    'models_path' => app_path('Models'),

    // Formato de permissões: snake, kebab, camel, pascal, lower, upper
    'permission_format' => env('BASE_POLICIES_PERMISSION_FORMAT', 'snake'),

    // Separador de permissões: underscore, dot, hyphen, space, colon, slash, pipe
    'permission_separator' => env('BASE_POLICIES_PERMISSION_SEPARATOR', 'colon'),

    // Mapeamento de ações para permissões (customizável)
    'permission_mappings' => [
        'viewAny' => 'view',
        'view' => 'view',
        'create' => 'create',
        'update' => 'update',
        'delete' => 'delete',
        'restore' => 'restore',
        'forceDelete' => 'force_delete',
    ],
];



namespace App\Policies;

use App\Models\Post;
use App\Models\User;
use EduardoRibeiroDev\BasePolicies\Policies\BasePolicy;

class PostPolicy extends BasePolicy
{
    // Herda automaticamente: viewAny, view, create, update, delete, restore, forceDelete
}

// Autorizar visualização
if ($user->can('view', $post)) {
    // Usuário pode visualizar este post
}

// Autorizar criação
if ($user->can('create', Post::class)) {
    // Usuário pode criar posts
}

// Usar no controller
$this->authorize('view', $post);
$this->authorize('delete', $post);

use EduardoRibeiroDev\BasePolicies\Facades\BasePolicies;

// Obter o nome formatado da permissão
$permissionName = BasePolicies::getPermissionName('view', 'Post');
// Resultado: 'view:post'

// Verificar permissão
$allowed = BasePolicies::checkPermission($user, 'view', 'Post');

// Obter rótulo formatado da permissão
$label = BasePolicies::getPermissionLabel('view:post');
// Resultado: 'Ver Post'

class PostPolicy extends BasePolicy
{
    public function publish(User $user, Post $post): bool
    {
        return $user->hasPermissionTo('publish:post');
    }

    public function archive(User $user, Post $post): bool
    {
        return $user->hasPermissionTo('archive:post');
    }
}

$user->givePermissionTo('view:post');
$user->syncPermissions(['view:post', 'create:post']);
$user->hasPermissionTo('delete:post');



namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    public function show(Post $post)
    {
        $this->authorize('view', $post);
        return view('posts.show', compact('post'));
    }

    public function edit(Post $post)
    {
        $this->authorize('update', $post);
        return view('posts.edit', compact('post'));
    }

    public function destroy(Post $post)
    {
        $this->authorize('delete', $post);
        $post->delete();
        return redirect()->route('posts.index');
    }
}

$user = User::find(1);

// Dar permissão individual
$user->givePermissionTo('view:post');

// Sincronizar múltiplas permissões
$user->syncPermissions([
    'view:post',
    'create:post',
    'update:post',
]);

// Atribuir role
$user->assignRole('editor');
bash
php artisan vendor:publish --tag=base-policies-config
bash
php artisan vendor:publish --tag=base-policies-stubs
bash
php artisan generate:permissions
bash
php artisan generate:policies
bash
php artisan migrate