Install the package via Composer:
composer require vendor/package-name
Publish the package configuration (if applicable):
php artisan vendor:publish --provider="Vendor\PackageName\PackageServiceProvider"
The core feature is now policy integration, enabling authorization checks directly in your application logic. Start by defining a policy for your model (e.g., PostPolicy for Post model):
php artisan make:policy PostPolicy --model=Post
Use the policy in your controller or service:
use Vendor\PackageName\Facades\PackageName;
public function update(Request $request, Post $post)
{
if (PackageName::authorize($request->user(), 'update', $post)) {
// Proceed with logic
}
}
Check the README.md for the new authorize() method documentation.
Policy class for your models.AuthServiceProvider:
protected $policies = [
Post::class => PostPolicy::class,
];
PackageName::authorize() to check permissions:
if (PackageName::authorize($user, 'edit', $resource)) {
// Authorized action
}
if (PackageName::authorize($request->user(), 'access', $resource)) {
return $resource->load('comments');
}
if (PackageName::authorize(auth()->user(), 'manage', $module)) {
return view('admin.module');
}
public function handle($request, Closure $next)
{
if (!PackageName::authorize($request->user(), 'view', $request->route('resource'))) {
abort(403);
}
return $next($request);
}
Gate for granular control.PackageName::authorize($user, 'delete', $postId)) if your policy supports it.PackageName::shouldAuthorize() in PHPUnit to mock policy checks:
$this->partialMock(PackageName::class, function ($mock) {
$mock->shouldReceive('authorize')->andReturn(true);
});
php artisan cache:clear
Or use Policy::reset() in testing.authorize() matches the policy’s expected type (e.g., Post vs. int).$service = app(Vendor\PackageName\Services\AuthorizationService::class);
$service->check($user, 'action', $resource);
APP_DEBUG=true) to log failed policy checks.Psr\Log\LoggerInterface in the service container:
$this->app->bind(Vendor\PackageName\Contracts\Logger::class, function () {
return Log::channel('policy');
});
'authorization' => [
'handler' => Vendor\PackageName\Handlers\CustomHandler::class,
],
Event::listen(Vendor\PackageName\Events\PolicyChecked::class, function ($event) {
// Log or react to policy checks
});
PackageName::authorize($user, $action, $resource)) by implementing Vendor\PackageName\Contracts\DynamicPolicy.composer.json:
"autoload": {
"psr-4": {
"App\\Policies\\": "app/Policies/"
}
}
config/package-name.php:
'unauthorized_response' => [
'status' => 403,
'message' => 'Unauthorized action.',
],
How can I help you explore Laravel packages today?