craftcamp/php-abac
Attribute-based access control (ABAC) for PHP apps. Define policies using attributes and evaluate permissions based on user, resource, action, and context. Framework-agnostic with a simple API, suited for fine-grained authorization beyond roles.
Gate, Policy), this package could complement or replace it for complex scenarios where permissions depend on dynamic attributes (e.g., user roles, resource metadata, time-based rules, or external conditions).auth:api/auth:web pipelines.Gate/Policy, migrating to ABAC may require refactoring existing authorization logic.Use Case Justification:
Performance Implications:
Tooling & Developer Experience:
Security & Compliance:
Migration Strategy:
Gate/Policy systems, or is a full rewrite needed?Gate/Policy logic with ABAC where dynamic attributes are needed.// Old: RBAC via Policy
Route::get('/admin', function () {
$this->authorize('view-admin');
});
// New: ABAC via Middleware
Route::get('/admin', function () {
// ABAC middleware evaluates attributes like user.department, resource.owner
})->middleware('abac:admin-access');
auth middleware for basic auth).// Combined middleware pipeline
$router->middleware([
\App\Http\Middleware\Authenticate::class,
\App\Http\Middleware\AbacMiddleware::class, // Only if ABAC attributes are available
]);
spatie/laravel-permission).config/app.php.{
"action": "edit_post",
"subject_attributes": ["user.department: 'editorial'"],
"resource_attributes": ["post.published: true"],
"effect": "allow"
}
public function handle(Request $request, Closure $next) {
if (!$this->abac->evaluate($request->user(), $request->route(), 'view')) {
abort(403);
}
return $next($request);
}
user.license_expired").[ABAC] Denied action: 'delete_user'
Subject: user(id=123, role=admin, department=marketing)
Resource: user(id=456, owner_id=789)
Policy: 'department:admin' AND 'owner:user' → Failed on 'owner:user'
How can I help you explore Laravel packages today?