experteam / api-laravel-base
Library to help with Laravel api Authentication
Requires
- php: ^8.3 || ^8.4
- ext-json: *
- illuminate/http: ^10.0 || ^11.0 || ^12.0 || ^13.0
- illuminate/support: ^10.0 || ^11.0 || ^12.0 || ^13.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-master
- 3.0.0
- v2.x-dev
- 2.4.0
- 2.3.1
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- v2.1.0
- v2.0.0
- 1.2.0
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature-34383
- dev-authGuard-Improvements
- dev-feature-19348
- dev-fix-permission
- dev-BusinessDays
- dev-ESlog
This package is auto-updated.
Last update: 2026-10-29 18:56:19 UTC
README
Base service providers to manage crud services
It includes:
- Model paginate: Trait to manage pagination, it can manage limit, offset and order by.
Install
Run the following commands to install:
composer require experteam/api-laravel-base
Change the
Update
Run the composer command to update the package:
composer update experteam/api-laravel-base
Role scope
RoleScope restricts queries to the data the active role may see. The scope comes from the token role and its validated session, never from request parameters. The hierarchy is read from the companies.companyCountry, companies.location and companies.installation Redis hashes.
Each model declares its organizational columns, as a list or as a map from field to column:
public array $roleScope = ['country_id', 'company_country_id', 'location_id', 'installation_id']; public array $roleScope = ['location_id' => 'check_in_operation_location_id']; public array $roleScope = [];
An empty array marks data without organizational owner. A model without the property, with an unknown field, or without any column the level can use, fails with AuthorizationException. Installation filters by the session location when the model does not declare installation_id. The levels above resolve through the Redis hierarchy when the model lacks their own column.
RoleScope::current()->apply(Shipment::query()); RoleScope::current()->constrain($match, Payment::class); RoleScope::current()->authorize($request->only(['country_id', 'location_id', 'installation_id']));
apply() wraps the previous filters in a group and adds the conditions after them. Apply it last. Global roles and AppKey calls without a role are not restricted.
allows() and authorize() check filters: an id passes when its subtree intersects the scope, and a company_id is rejected. In writes, take ownership from the session.
Every queued job starts without a scope. A job sets its own and restores the previous one:
$previous = RoleScope::swap(RoleScope::fromSnapshot($role, $session)); try { $this->export(); } finally { RoleScope::swap($previous); }