bartlomiejbeta / api-scope-bundle
Simple API query string scope recognizer
Package info
github.com/bartlomiejbeta/APIScopeBundle
Type:symfony-bundle
pkg:composer/bartlomiejbeta/api-scope-bundle
v3.0.1
2018-11-16 13:42 UTC
Requires
- php: ^7.1.3
- sensio/framework-extra-bundle: ^5.1
- symfony/symfony: ^4.0|^4.1
Requires (Dev)
- phpunit/phpunit: ^7.3
- symfony/phpunit-bridge: ^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
This Symfony bundle aims to provide simple serialization group recognize from query string (with basic security check if you need it).
Installation
1. Install via composer:
composer require bartlomiejbeta/api-scope-bundle
2. Register bundle in AppKernel:
public function registerBundles() { $bundles = array( // ... new BartB\APIScopeBundle\APIScopeBundle(), ); }
3. Configure in config.yml:
api_scope:
scopes:
api.get_item: #route name
always_included: #will be always included to scopes bag
- 'first_always_included_group'
- 'second_always_included_group'
supported_key_map:
external1: { internal_name: 'scope.internal_name1'} #if `external1` will be in the query string than `scope.internal_name1` will be in the scopes bag
external2:
internal_name: 'scope.internal_name2'
security: 'can-add-external2-scope' # security voter (check symfony security voter) attribution name (to check if scope can be applied)
Usage
1. Simple
/** * @ScopeConverter() * @Rest\Route("/api/item", name="api.get_item") */ public function getCarCollection(Request $request, ScopeCollection $scopeCollection): Response { $view = $this->view($scopeCollection, Response::HTTP_OK); $scopesFromQueryString = $scopeCollection->getScopes() return $this->handleView($view); }
example request:
.../api/item?with[]=external1
example response:
{"scopes":["first_always_included_group","second_always_included_group","scope.internal_name1"]}
2. Configured
/** * @ScopeConverter(value="scopes",queryString="scope") * @Rest\Route("/api/item", name="api.get_item") */ public function getCarCollection(Request $request, ScopeCollection $scopes): Response { $view = $this->view($scope,Response::HTTP_OK); scopesFromQueryString = $scopeCollection->getScopes() return $this->handleView($view); }
example request:
.../api/item?scope[]=external1&scope[]=external2
example response:
{"scopes":["first_always_included_group","second_always_included_group","scope.internal_name1","scope.internal_name2"]}