colbeh/access
Colbeh Access is a lightweight Laravel package for managing user access and permissions in your app. Add simple role/permission checks, protect routes and actions, and keep authorization logic organized with minimal setup.
Installation
composer require colbeh/access
Publish the migration and config:
php artisan vendor:publish --provider="Colbeh\Access\AccessServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Colbeh\Access\AccessServiceProvider" --tag="config"
Run migrations:
php artisan migrate
Basic Configuration
Edit config/access.php to define your roles and permissions:
'roles' => [
'admin' => ['create_users', 'manage_permissions'],
'editor' => ['edit_content'],
'user' => ['view_content'],
],
First Use Case: Check Permission
use Colbeh\Access\Facades\Access;
if (Access::check('create_users')) {
// User has permission
}
Assign Roles to Users
$user->roles()->attach(['admin', 'editor']);
Useful for user registration or admin panels.
Check Role-Based Access
if (Access::hasRole('admin')) {
// Admin-specific logic
}
Create a middleware to gate routes:
namespace App\Http\Middleware;
use Closure;
use Colbeh\Access\Facades\Access;
class CheckPermission
{
public function handle($request, Closure $next, $permission)
{
if (!Access::check($permission)) {
abort(403);
}
return $next($request);
}
}
Register in app/Http/Kernel.php:
protected $routeMiddleware = [
'permission' => \App\Http\Middleware\CheckPermission::class,
];
Usage in routes:
Route::get('/admin/users', function () {
// ...
})->middleware('permission:create_users');
For complex logic (e.g., "edit own profile" vs. "edit any profile"):
// In a controller
if (Access::check('edit_profile', ['user_id' => $user->id])) {
// User can edit their own profile
}
Extend Laravel’s built-in policies:
use Colbeh\Access\Facades\Access;
class PostPolicy
{
public function update(User $user, Post $post)
{
return Access::check('edit_content', ['post_id' => $post->id]);
}
}
Migration Conflicts
users or roles tables already exist, manually merge the role_user pivot table or drop/recreate it.Caching Quirks
php artisan cache:clear
config/access.php during development:
'cache' => env('APP_ENV') !== 'local',
Case Sensitivity
define('PERMISSION_EDIT', 'edit_content');
Log Permission Checks
Enable debug mode in config/access.php:
'debug' => true,
Check Laravel logs for denied access attempts.
Dump User Roles/Permissions
dd(Access::user()->roles, Access::user()->permissions);
Custom Permission Logic
Override the can() method in a service provider:
Access::extend(function ($user, $permission, $arguments = []) {
// Custom logic (e.g., time-based permissions)
});
API Integration Return permissions in API responses:
return response()->json([
'permissions' => Access::user()->permissions,
]);
GUI for Admin Panels Use the package’s built-in commands to generate admin views:
php artisan access:generate-views
(Note: Requires additional setup; check the docs for updates.)
How can I help you explore Laravel packages today?