adimeo-data-suite/security
Laravel security toolkit for Adimeo Data Suite apps, providing common security utilities and integrations such as authentication/authorization helpers, hardened defaults, and middleware-friendly protections to secure APIs and admin back offices.
Installation
composer require adimeo-data-suite/security
Publish the config file (if needed):
php artisan vendor:publish --provider="Adimeo\DataSuite\Security\SecurityServiceProvider" --tag="config"
First Use Case: Basic Authentication Middleware
Register the middleware in app/Http/Kernel.php:
protected $routeMiddleware = [
'auth.security' => \Adimeo\DataSuite\Security\Middleware\Authenticate::class,
];
Apply it to a route:
Route::get('/secure', function () {
return response()->json(['message' => 'Secure endpoint']);
})->middleware('auth.security');
Configuration
Check config/security.php for default settings (e.g., token expiration, encryption keys). Override as needed:
'tokens' => [
'expiration' => env('SECURITY_TOKEN_EXPIRATION', 60), // minutes
],
Token-Based Authentication
Generate and validate tokens via the Security facade:
use Adimeo\DataSuite\Security\Facades\Security;
// Generate token
$token = Security::generateToken(['user_id' => 1]);
// Validate token
$payload = Security::validateToken($token);
Role-Based Access Control (RBAC)
Define roles in config/security.php:
'roles' => [
'admin' => ['create', 'read', 'update', 'delete'],
'user' => ['read', 'update'],
],
Apply role checks in middleware or controllers:
if (!Security::hasPermission('update')) {
abort(403);
}
API Rate Limiting Use the built-in rate limiter:
Route::middleware(['throttle:60,1'])->group(function () {
// Rate-limited routes
});
Authenticate middleware.\Adimeo\DataSuite\Security\Guards\TokenGuard for non-standard token storage (e.g., Redis).token.created or token.revoked events to log or notify users.Token Storage
security_tokens table). For high-scale apps, consider Redis:
'tokens' => [
'driver' => 'redis',
],
php artisan migrate) will break token validation.CORS Issues
Authorization header if using API tokens:
'headers' => ['Authorization', 'X-Requested-With', 'Content-Type'],
Token Expiration
config('security.tokens.expiration') minutes. Set this to null for persistent tokens (not recommended for security).security_tokens table for revoked/expired tokens. Use Tinker to debug:
php artisan tinker
>>> \Adimeo\DataSuite\Security\Facades\Security::validateToken($token);
config/security.php and clear cached config:
php artisan config:clear
Custom Token Payloads
Extend the TokenPayload class to add metadata:
namespace App\Extensions;
use Adimeo\DataSuite\Security\Contracts\TokenPayload as BasePayload;
class CustomTokenPayload implements BasePayload {
public function getPayload(): array {
return [
'user_id' => auth()->id(),
'custom_field' => 'value',
];
}
}
Bind it in AppServiceProvider:
Security::extend('custom', function () {
return new CustomTokenPayload();
});
Token Revocation Manually revoke tokens via the facade:
Security::revokeToken($token);
Or trigger revocation on user logout:
event(new \Adimeo\DataSuite\Security\Events\TokenRevoked($token));
Logging
Enable token-related logging in config/security.php:
'logging' => [
'enabled' => true,
'channel' => 'single',
],
How can I help you explore Laravel packages today?