bildvitta/iss-sdk

此包用于与权限和认证微服务进行通信。

v0.1.16 2024-09-10 15:02 UTC

This package is auto-updated.

Last update: 2024-09-10 15:02:52 UTC


README

Latest Version on Packagist Total Downloads

简介

国际空间站(ISS)旨在成为其生态系统微服务与用户认证和权限微服务(在脚本中称为Hub.permissions模块/微服务,以下简称为Hub)之间的连接空间站(客户端)。

安装

您可以通过composer安装此包。

composer require bildvitta/iss-sdk:dev-develop

为了使一切工作得更好,除了在您的应用程序中发布设置文件外,还需要运行以下命令

php artisan hub:install

配置

这是发布配置文件的内容

return [
    'base_uri' => env('MS_HUB_BASE_URI', 'https://api-dev-hub.nave.dev'),

    'front_uri' => env('MS_HUB_FRONT_URI', 'https://develop.hub.nave.dev'),

    'prefix' => env('MS_HUB_API_PREFIX', '/api'),

    'model_user' => '\App\Entities\User',

    'model_company' => '\BildVitta\Hub\Entities\HubCompany::class',

    'programatic_access' => [
        'client_id' => env('HUB_PROGRAMMATIC_CLIENT'),
        'client_secret' => env('HUB_PROGRAMMATIC_SECRET')
    ],

    'oauth' => [
        'client_id' => env('HUB_CLIENT_ID', ''),
        'client_secret' => env('HUB_CLIENT_SECRET', ''),
        'redirect' => env('HUB_REDIRECT_URI', ''),
        'scopes' => env('HUB_SCOPE', 'profile'),

        'authorize_uri' => '/auth/authorize',
        'token_uri' => '/oauth/token',
        'userinfo_uri' => '/users/me'
    ]
];

在您的配置文件夹中发布配置文件 hub.php 后,您需要在您的 .env 文件中创建环境变量

MS_HUB_BASE_URI="https://api-dev-hub.nave.dev"

MS_HUB_PREFIX="/api"

从 spatie/laravel-permissions 改变权限和角色模型

您应该将默认的 spatie/laravel-permissions 模型更改为我们的,因为我们有一些关于角色和权限使用的重大更改。

// config/permission.php

return [
    'models' = [
        'permission' => \BildVitta\Hub\Entities\HubPermission::class,
        'role' => \BildVitta\Hub\Entities\HubRole::class,
    ]
];

如果您已经对这些模型进行了更改,只需扩展我们的类以获得正确的功能即可。

在用户模型上添加Trait

并且请记住在用户模型上添加 BildVitta\Hub\Traits\User\HasCompanyLinks Trait。

// \App\Models\User

use BildVitta\Hub\Traits\User\HasCompanyLinks;

class User extends Authenticatable
{
    use HasCompanyLinks;
    ...
}

请记住,此trait默认已包含 Spatie\Permission\Traits\HasRoles,因此您可以从用户模型中删除 Spatie\Permission\Traits\HasRoles trait。

用法

对ISS服务发出的所有请求都将返回一个实现PHP ArrayAccess 接口的 \Illuminate\Http\Client\Response 实例,允许您直接在响应中访问JSON响应数据。

这意味着可以使用各种方法来检查响应,以下是一些方法:

$response = Hub::setToken('jwt')->auth()->permissions();

$response->body(); // string;
$response->json(); // array|mixed;
$response->collect(); // Illuminate\Support\Collection;
$response->status(); // int;
$response->ok(); // bool;
$response->successful(); // bool;
$response->failed(); // bool;
$response->serverError(); // bool;
$response->clientError(); // bool;
$response->header('content-type'); // string;
$response->headers(); // array;

初始化ISS服务。

由于有多种编程方式,因此也有多种启动ISS服务的方式。

以下是启动服务的一些方式。

$token = 'jwt';

$hub = app('hub', [$token]); // instance 2
$hub = app('hub')->setToken($token); // instance 1
$hub = new \BildVitta\Hub\Hub($token); // instance 3
$hub = (new \BildVitta\Hub\Hub())->setToken($token); // instance 4
$hub = BildVitta\Hub\Facades\Hub::setToken($token); // instance 1

认证用户

为了在您的模块中认证Hub用户,需要使用中间件 hub.auth = \ BildVitta \ Hub \ Middleware \ AuthenticateHubMiddleware

它将验证令牌,如果不存在,将在其用户表中创建令牌的用户。

Route::middleware('hub.auth')->get('/users/me', function () {
    return auth()->user()->toArray();
});

当我们安装包时,我们在您的用户表中创建了 hub_uuid 列。

如果无法认证,中间件将返回401。

用户认证

要直接访问令牌的用户数据,存在 \BildVitta\Hub\Contracts\Resources\AuthResourceContract 接口。

检查令牌

验证通过参数传递的令牌或之前在ISS服务中加载的令牌是否有效。

用法示例

try {
    Hub::auth()->check('jwt');
} catch (RequestException $requestException) {
    throw new Exception('invalid token');
}

获取权限

可以获取上传到ISS服务的令牌的所有权限。

用法示例

try {
    $permissions = Hub::setToken('jwt')->auth()->permissions()['results']; // Implements `ArrayAccess`
    
    foreach ($permissions as $permission) {
        #TODO
    }
} catch (RequestException $requestException) {
    #TODO
}

将权限范围添加到实体列表中。

现在我们已经添加了一个按登录用户的权限级别过滤的范围。要使用它,非常简单,只需在全局范围中添加PermissionScope类,传递用户必须拥有的权限,然后神奇的事情就会发生;D

代码示例

use BildVitta\Hub\Scopes\PermissionScope;

$query = RealEstateDevelopment::query();
$query->withGlobalScope('permission', new PermissionScope('real_estate_developments.show'));

$count = $query->count();
$query->pagination();

return (new RealEstateDevelopmentResource('index', $query->get()))->count($count);

请记住,作用域名称必须是permission,否则它将不起作用 <3

通知

确保在 config/app.php 中启用了 BroadcastServiceProvider。

ABLY_KEY 键添加为环境变量(向您的协调员询问此密钥)。

ABLY_KEY=your-ably-key

然后,在应用程序的 .env 文件中将 BROADCAST_CONNECTION 环境变量设置为 ably。

BROADCAST_CONNECTION=ably

检查 routes/channels.php 文件,确保私有频道认证路由正确。

use Illuminate\Support\Facades\Broadcast;

Broadcast::channel('notifications.{uuid}', function ($user, $uuid) {
    return (string) $user->uuid === (string) $uuid;
});

请确保 $user->uuid 与在 hub 中使用的相同,否则在此私有频道认证 API 中可能会导致 403 错误。

完成时,转到 BroadcastServiceProvider 文件并更改为此代码。

Broadcast::routes([
    'middleware' => ['hub.check'],
    'prefix' => 'api',
]);

测试

即将推出...

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

有关详细信息,请参阅 贡献指南

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件