PHP code example of back2lobby / access-control

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

    

back2lobby / access-control example snippets


// Give a role some permission
AccessControl::allow("manager")->to('edit-company');

// Assign role to any user
AccessControl::assign('manager')->to($user);

// You can also assign role for a specific roleable model
AccessControl::assign('manager',$company)->to($user);

// Checking the permission on user for a roleable model
AccessControl::canUser($user)->do("edit-company",$company);

// Checking if the user has a role for that model
AccessControl::is($user)->a("manager",$company);

   use Illuminate\Database\Eloquent\Factories\HasFactory;
   use Illuminate\Foundation\Auth\User as Authenticatable;
   use Back2Lobby\AccessControl\Traits\HasRoles;
    
   class User extends Authenticatable
   {
    use HasFactory, HasRoles
   
    // code here
   }
   

   use Back2Lobby\AccessControl\Traits\Roleable;
   class Post extends Model
   {
       use Roleable;
   }
   

use Illuminate\Database\Seeder;
use Back2Lobby\AccessControl\Facades\AccessControlFacade as AccessControl;

class AccessControlSeeder extends Seeder
{
    public function run()
    {
        // Create all roles
        AccessControl::createManyRoles([
            [
                'name' => 'admin',
                'title' => 'Administrator',
            ],
            [
                'name' => 'editor',
                'title' => 'Editor',
            ]
        ]);

        // Create all permissions
        AccessControl::createManyPermissions([
            [
                'name' => 'create-post',
                'title' => 'Create Post',
                'description' => 'Allows user to create a new post',
            ],
            [
                'name' => 'edit-post',
                'title' => 'Edit Post',
                'description' => 'Allows user to edit an existing post',
            ],
        ]);
    }
}

use AccessControl;

$superAdmin = AccessControl::createRole([
    'name' => 'super-admin',
    'title' => 'Super Admin'
]);

AccessControl::createRole([
    'name' => 'manager',
    'title' => 'Manager',
    'roleables' => [Company::class]
]);

// &check; assigning role with allowed roleable will work fine
$user->assign('manager',$company);

// &cross; assigning role with roleable that's not allowed will throw error
$user->assign('manager',$post);

AccessControl::createManyRole([
    ['name','company-manager','tittle'=>'Company Manager'],
    ['name','company-user','title' => 'Company User']
]);

// using role name
AccessControl::updateRole('author',[
'name' => 'post-author',
'title' => 'Post Author'
]);

AccessControl::deleteRole('author');

AccessControl::getRole('admin');

AccessControl::getAllRoles();

AccessControl::allow('author')->to('edit'); // with permission name

AccessControl::allow('author')->to($permission); // with permission object

AccessControl::allow('author')->to(3); // with permission id

$role->allow('create-post');

AccessControl::allow('super-admin')->superPermission();

AccessControl::disallow('admin')->to('create admin');

$role->disallow('create-post');

AccessControl::disallow('manager')->superPermission();

AccessControl::forbid('manager')->to('delete company');

$role->forbid('create-post');

AccessControl::forbid('manager')->superPermission();

$permissions = AccessControl::getAllPermissionsOf('manager');

 // getting allowed permissions
 $allowedPermissions = AccessControl::getAllowedPermissionsOf('manager');

 $directlyAllowedPermissions = AccessControl::getDirectlyAllowedPermissionsOf('manager');

 $indirectlyAllowedPermissions = AccessControl::getIndirectlyAllowedPermissionsOf('manager');

 // getting forbidden permissions
 $forbiddenPermissions = AccessControl::getForbiddenPermissionsOf('manager');

 $directlyForbiddenPermissions = AccessControl::getDirectlyForbiddenPermissionsOf('manager');

 $indirectlyForbiddenPermissions = AccessControl::getIndirectlyForbiddenPermissionsOf('manager');

AccessControl::assign('admin')->to($user); // using facade

$user->assign('editor'); // using user model

AccessControl::assign('manager',$project)->to($user); // using facade

$user->assign('manager',$project); // using user model

AccessControl::retract('admin')->from($user);

AccessControl::retract('manager',$company)->from($user);

AccessControl::is($user)->a('manager',$company);

AccessControl::is($user)->an('admin');

AccessControl::is($user)->notA('manager',$company);

AccessControl::is($user)->notAn('admin');

AccessControl::is($user)->all([
    'admin',
    'manager'
]);

AccessControl::is($user)->all([
    'manager'
]);

AccessControl::is($user)->any([
    'admin',
    'manager'
]);

AccessControl::resetRole('admin');

AccessControl::createPermission([
    'name' => 'edit-post',
    'title' => 'Edit Post'
]);

AccessControl::createManyPermissions([
    ['name' => 'create-post','title' => 'Create Post'],
    ['name' => 'edit-post','title' => 'Edit Post'],
    ['name' => 'delete-post','title' => 'Delete Post']
]);

AccessControl::updatePermission('remove-post',[
   'name' => 'delete-post',
   'title' => 'Delete Post'
]);

AccessControl::deletePermission('edit-post');

AccessControl::getPermission('delete-company');

AccessControl::getPermissions();

$rolesWhoCanEdit = AccessControl::getAllRolesOf('edit-post');

// getting allowed roles
$allowedRoles = AccessControl::getAllowedRolesOf('edit-post');

$directlyAllowedRoles = AccessControl::getDirectlyAllowedRolesOf('edit-post');

$indirectlyAllowedRoles = AccessControl::getIndirectlyAllowedRolesOf('edit-post');

// getting forbidden roles
$forbiddenRoles = AccessControl::getForbiddenRolesOf('edit-post');

$directlyForbiddenRoles = AccessControl::getDirectlyForbiddenRolesOf('edit-post');

$indirectlyForbiddenRoles = AccessControl::getIndirectlyForbiddenRolesOf('edit-post');

$roles = $user->roles()->get();

$roles = $user->permissions();

$admins = User::whereIs('admin')->get();

$players = User::whereIs('player',$team)->get();

$admins = $adminRole->users()->get();

$users = User::whereHas('edit-post',$post)->get();

$canCreatePost = AccessControl::canUser($user)->do('create-post');

$canEditPost = AccessControl::canUser($user)->do('edit-post',$post);

AccessControl::resetUser($user);

AccessControl::sync();

AccessControl::clearCache();

AccessControl::reset();

AccessControl::cache();

if($user->can('view-dashboard')){
    // your code here
}

$user->can('edit-company',$company);

@can('ban-users')
	<button class="btn btn-danger">Ban User</button>
@endcan

@can('edit-post',$post)
	<a href="{{ route('post.edit') }}">Edit Post</a>
@endcan

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware('can:access-dashboard');

Route::get('/posts/{post}/edit', function () {
    return view('dashboard');
})->middleware('can:edit-post,' . Post::class);

'auth_user_model' => CustomUserModel::class


	'guards' => [
		'web' => [
			'driver' => 'session',
			'provider' => 'customUsers',
		],
	],

	'providers' => [
		'customUsers' => [
			'driver' => 'eloquent',
			'model' => App\Models\CustomUserModel::class,
		],
	],


   php artisan vendor:publish --tag="access-control.migrations"
   

   php artisan migrate
   

php artisan vendor:publish --tag="access-control.config"

php artisan migrate:fresh