PHP code example of perer876 / permission

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

    

perer876 / permission example snippets


 declare(strict_types=1);

namespace App\Permissions;

use Guard\Role;

enum UserRole: string implements Role
{
    case Admin = 'admin';
    case User = 'user';
    case Guest = 'guest';
}

 declare(strict_types=1);

namespace App\Permissions;

use Guard\GrantTo;
use Guard\Permission;

#[GrantTo(UserRole::Admin)] // <- Top level: It's granted to all permissions
enum TodoPermission implements Permission
{
    #[GrantTo(UserRole::Member)] // <- Fine-grained: It's granted to this specific permission
    case ViewAny;

    #[GrantTo(UserRole::Member, UserRole::Viewer)] // <- Multiple roles can be granted
    case View;

    #[GrantTo(UserRole::Member)]
    #[GrantTo(UserRole::Editor)]
    case Create;

    #[GrantTo(UserRole::Member, UserRole::Editor)]
    case Update;
    
    case Delete;
}

 declare(strict_types=1);

namespace App\Models;

use App\Permissions\UserRole;
use Guard\AsSubject;
use Guard\Subject;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Override;

final class User extends Authenticatable implements Subject
{
    use AsSubject;
    
    /** @return iterable<UserRole> */
    #[Override]
    public function getRoles(): iterable
    {
        yield $this->role;
    }
    
    /** @return array<string, string> */
    protected function casts(): array
    {
        return [
            'role' => UserRole::class,
        ];
    }
    
    /* ... */
}

$user->hasPermission(TodoPermission::ViewAny);