frontegg/php-sdk

Frontegg SDK for PHP

0.2.3 2021-05-21 10:41 UTC

This package is auto-updated.

Last update: 2024-09-21 18:34:47 UTC


README

alt text

Frontegg是一个网站平台,SaaS公司可以在其中建立完全托管、可扩展且具有品牌意识的-SaaS功能,并通过最多5行代码将它们集成到其SaaS门户中。

安装

使用包管理器Composer安装Frontegg SDK for PHP。

composer require frontegg/php-sdk

使用方法

Frontegg提供多个组件,用于与Frontegg的可扩展后端和前端库集成。

简单示例

最小配置

<?php

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Frontegg;
use Psr\Http\Message\RequestInterface;

$config = [
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_SECRET_API_KEY',
    'contextResolver' => function(RequestInterface $request) {
        return [
            'tenantId' => 'THE-TENANT-ID',
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
];

$frontegg = new Frontegg($config);
$frontegg->init();

高级配置

<?php

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Frontegg;
use Frontegg\HttpClient\FronteggCurlHttpClient;
use Psr\Http\Message\RequestInterface;

$config = [
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_SECRET_API_KEY',
    'apiBaseUrl' => 'https://api.frontegg.com/',
    'authenticationBaseUrl' => 'https://api.frontegg.com/',
    'apiUrls' => [
        'authentication' => '/auth/vendor',
        'audits' => '/audits',
    ],
    'contextResolver' => function(RequestInterface $request) {
        return [
            'tenantId' => 'THE-TENANT-ID',
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
    'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy.
    'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client.
];

$frontegg = new Frontegg($config);
$frontegg->init();

配置

*特殊接口 - Frontegg\HttpClient\FronteggHttpClientInterface,

**Curl客户端 - Frontegg\HttpClient\FronteggCurlHttpClient

审计

让您的客户记录他们对租户所做的事件、活动和更改。

Frontegg的托管审计日志功能允许SaaS公司仅用几行代码嵌入端到端的工作功能。

发送审计

<?php

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Frontegg;
use Frontegg\HttpClient\FronteggCurlHttpClient;
use Psr\Http\Message\RequestInterface;

$config = [
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_SECRET_API_KEY',
    'apiBaseUrl' => 'https://api.frontegg.com/',
    'apiUrls' => [
        'authentication' => '/auth/vendor',
        'audits' => '/audits',
    ],
    'contextResolver' => function(RequestInterface $request) {
        return [
            'tenantId' => 'THE-TENANT-ID',
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
    'disableCors' => false, // You can enable/disable CORS headers for Middleware Proxy.
    'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client.
    'apiVersion' => 'v1', // Not used yet. Coming soon.
];

$frontegg = new Frontegg($config);
$auditLog = $frontegg->sendAudit('THE-TENANT-ID', [
    'user' => 'testuser@t.com',
    'resource' => 'Portal',
    'action' => 'Login',
    'severity' => 'Info',
    'ip' => '123.1.2.3',
]);

获取审计

<?php

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Frontegg;
use Frontegg\HttpClient\FronteggCurlHttpClient;
use Psr\Http\Message\RequestInterface;

$config = [
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_SECRET_API_KEY',
    'contextResolver' => function(RequestInterface $request) {
        return [
            'tenantId' => 'THE-TENANT-ID',
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
    'apiBaseUrl' => 'https://api.frontegg.com/',
    'apiUrls' => [
        'authentication' => '/auth/vendor',
        'audits' => '/audits',
    ],
    'httpClientHandler' => new FronteggCurlHttpClient(), // You can provide custom HTTP client.
];

$frontegg = new Frontegg($config);
$auditsLog = $frontegg->getAudits(
    'THE-TENANT-ID',
    'Text to filter',
    0, // Offset
    10, // Count
    'action', // Field to sort by
    'ASC' // Sort direction ('ASC' or 'DESC')
    // ... Additional filters
);

事件

事件触发简单且可最大程度地配置为不同的通知渠道。

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Events\Config\ChannelsConfig;
use Frontegg\Events\Config\DefaultProperties;
use Frontegg\Events\Config\TriggerOptions;
use Frontegg\Events\Channel\WebHookBody;
use Frontegg\Frontegg;
use Psr\Http\Message\RequestInterface;

$clientId = 'YOUR_CLIENT_ID';
$apikey = 'YOUR_API_KEY';
$config = [
    'clientId' => $clientId,
    'clientSecret' => $apikey,
    'contextResolver' => function(RequestInterface $request) {
        return [
            'tenantId' => 'THE-TENANT-ID',
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
];

$frontegg = new Frontegg($config);

$triggerOptions = new TriggerOptions(
    'eventKeyForTest',
    new DefaultProperties(
        'Default title',
        'Default description',
        [
            'name' => 'Policy 4',
            'id' => '11223456783245234',
        ]
    ),
    new ChannelsConfig(
        new WebHookBody([
            'title' => 'Test title!',
        ])
    ),
    'YOUR_TENANT_ID'
);
$response = $frontegg->triggerEvent($triggerOptions);

中间件(代理)

Frontegg代理将请求转发到Frontegg API并返回响应。

原始PHP中没有中间件(HTTP请求的过滤器机制),但在某些框架中有所支持。例如,在Laravel中。

这里您可以看到原始PHP的示例。您可以通过中间件轻松地将其应用于您的框架(对于Laravel,请参阅https://github.com/frontegg/samples/tree/master/frontegg-laravel-starter)。

<?php

require_once './vendor/autoload.php';
require_once './src/Frontegg/autoload.php';

use Frontegg\Frontegg;
use GuzzleHttp\Psr7\Request;
use Psr\Http\Message\RequestInterface;

/**
 * Setup routing rule for "/frontegg" URIs.
 * Can be a part of middleware f.e. in Laravel.
 */
if (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/frontegg') === 0) {
    $request = new Request('POST', $_SERVER['REQUEST_URI']);

    $response = handleFronteggUri($request);
}

// ...

function handleFronteggUri(RequestInterface $request)
{
    $clientId = 'YOUR_CLIENT_ID';
    $apikey = 'YOUR_API_KEY';
    $config = [
        'clientId' => $clientId,
        'clientSecret' => $apikey,
        'apiBaseUrl' => 'https://dev-api.frontegg.com/',
        'contextResolver' => function(RequestInterface $request) {
            return [
                'tenantId' => 'THE-TENANT-ID',
                'userId' => 'test-user-id',
                'permissions' => [],
            ];
        },
        'disableCors' => false,
    ];

    $frontegg = new Frontegg($config);
    $response = $frontegg->forward($request);

    return $response->getBody(); 
}

另一个原始PHP的示例,并展示了如何将请求参数适配到Psr-7 Request对象。

<?php

use Frontegg\Frontegg;
use Psr\Http\Message\RequestInterface;
use GuzzleHttp\Psr7\Request;

$requestMethod = $_SERVER['REQUEST_METHOD'];
$requestUri = str_replace('/api/frontegg', '', $_SERVER['REQUEST_URI']);
$httpHeaders = getallheaders();
$body = http_build_query($requestMethod === 'GET' ? $_GET : $_POST);
// Here you can see how to setup Psr-7 Request object.
$adapterRequest = new Request($requestMethod, $requestUri, $httpHeaders, $body);

$clientId = 'CLIENT_ID';
$apikey = 'API_KEY';
$tenantId = 'THE_TENANT_ID';
$config = [
    'clientId' => $clientId,
    'clientSecret' => $apikey,
    'apiBaseUrl' => 'https://api.test.com/',
    'contextResolver' => function(RequestInterface $request) use ($tenantId) {
        return [
            'tenantId' => $tenantId,
            'userId' => 'test-user-id',
            'permissions' => [],
        ];
    },
    'disableCors' => false,
];

$frontegg = new Frontegg($config);

$response = $frontegg->forward($adapterRequest);

print $response->getBody();