1
0
mirror of synced 2024-11-22 04:46:07 +03:00
service-bundle/Resources/doc/index.md
2021-02-05 14:47:54 +03:00

3.1 KiB

Installation

composer require retailcrm/service-bundle

Usage

Enable bundle in config/bundles.php:

<?php

return [
    // other bundles
    RetailCrm\ServiceBundle\RetailCrmServiceBundle::class => ['all' => true]
];

Create bundle config file in config/packages/retail_crm_service.yaml:

retail_crm_service:
  request_schema: ~

Deserializing incoming requests

Callbacks (form data)

To automatically get the callback request parameter


class AppController extends AbstractController
{
    public function activityAction(\App\Dto\Callback\Activity $activity): Response
    {
        // handle activity
    }
}

add to the config:

retail_crm_service:
      request_schema:
            callback:
                  - type: App\Dto\Callback\Activity
                    params: ["activity"]

request automatically will be deserialization to $activity.

Body json content


class AppController extends AbstractController
{
    public function someAction(\App\Dto\Body $activity): Response
    {
        // handle activity
    }
}

add to the config:

retail_crm_service:
    request_schema:
          client:
            - App\Dto\Body

Authentication

Example security configuration:

security:
    providers:
        client:
            entity:
                class: 'App\Entity\Connection' # must implements UserInterface
                property: 'clientId'
    firewalls:
        api:
            pattern: ^/api
            provider: client
            anonymous: ~
            lazy: true
            stateless: false
            guard:
                authenticators:
                    - RetailCrm\ServiceBundle\Security\FrontApiClientAuthenticator
        callback:
            pattern: ^/callback
            provider: client
            anonymous: ~
            lazy: true
            stateless: true
            guard:
                authenticators:
                    - RetailCrm\ServiceBundle\Security\CallbackClientAuthenticator
        main:
            anonymous: true
            lazy: true

    access_control:
         - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } # login for programmatically authentication user
         - { path: ^/api, roles: ROLE_USER }
         - { path: ^/callback, roles: ROLE_USER }

To authenticate the user after creating it, you can use the following code


use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use RetailCrm\ServiceBundle\Security\FrontApiClientAuthenticator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class AppController extends AbstractController
{
    public function someAction(
        Request $request,
        GuardAuthenticatorHandler $guardAuthenticatorHandler,
        FrontApiClientAuthenticator $frontApiClientAuthenticator,
        ConnectionManager $manager
    ): Response {
        $user = $manager->getUser(); // getting user

        $guardAuthenticatorHandler->authenticateUserAndHandleSuccess(
            $user,
            $request,
            $frontApiClientAuthenticator,
            'api'
        );
        // ...
    }
}