bildvitta / iss-sdk
此包用于与权限和认证微服务进行通信。
Requires
- php: ^7.4|^8.0|^8.1|^8.2|^8.3
- ably/ably-php: ^1.1
- illuminate/contracts: ^7.0|^8.0|^9.0|^10.0|^11.0
- spatie/laravel-permission: ^4.0|^5.0|^6.0
Requires (Dev)
- laravel/pint: ^1.13
- phpunit/phpunit: ^10.0
- dev-master
- v0.1.16
- v0.1.15
- v0.1.15-beta.01
- v0.1.14
- v0.1.14-beta.01
- v0.1.13
- v0.1.13-beta.04
- v0.1.13-beta.03
- v0.1.13-beta.02
- v0.1.13-beta.01
- v0.1.12
- v0.1.12-beta.6
- v0.1.12-beta.5
- v0.1.12-beta.4
- v0.1.12-beta.3
- v0.1.12-beta.2
- v0.1.12-beta.1
- v0.1.11
- v0.1.11-beta.2
- v0.1.11-beta.1
- v0.1.10
- v0.1.10-beta01
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1
- v0.1-beta.21
- v0.1-beta.20
- v0.1-beta.19
- v0.1-beta.18
- v0.1-beta.17
- v0.1-beta.16
- v0.1-beta.15
- v0.1-beta.14
- v0.1-beta.13
- v0.1-beta.12
- v0.1-beta.11
- v0.1-beta.10
- v0.1-beta.9
- v0.1-beta.8
- v0.1-beta.7
- v0.1-beta.6
- v0.1-beta.5
- v0.1-beta.4
- v0.1-beta.3
- v0.1-beta.2
- v0.1-beta.1
- v0.0.69
- v0.0.68
- v0.0.67
- v0.0.66
- v0.0.65
- v0.0.64
- v0.0.63
- v0.0.62
- v0.0.61
- v0.0.60
- v0.0.59
- v0.0.58
- v0.0.57
- v0.0.56
- v0.0.55
- v0.0.54
- v0.0.53
- v0.0.52
- v0.0.51
- v0.0.50
- v0.0.49
- v0.0.48
- v0.0.47
- v0.0.46
- v0.0.45
- v0.0.44
- v0.0.43
- v0.0.42
- v0.0.41
- v0.0.40
- v0.0.39
- v0.0.38
- v0.0.37
- v0.0.36
- v0.0.35
- v0.0.34
- v0.0.33
- v0.0.32
- v0.0.31
- v0.0.30
- v0.0.29
- v0.0.28
- v0.0.27
- v0.0.26
- v0.0.25
- v0.0.24
- v0.0.23
- v0.0.22
- v0.0.21
- v0.0.20
- v0.0.19
- v0.0.18
- v0.0.17
- v0.0.16
- v0.0.15
- v0.0.14
- v0.0.13
- v0.0.12
- v0.0.11
- v0.0.10
- v0.0.9
- v0.0.8
- v0.0.7
- v0.0.6
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
- dev-develop
- dev-feature/brands
- dev-bugfix/duplicate-columns-in-hub
- dev-feature/role-messaging
- dev-feature/fix-style
- dev-feature/update-to-laravel-10
- dev-feature/get-parent-user
- dev-feature/show-all-only-position
- dev-feature/check-position-user
- dev-feature/team-parent-positions
- dev-bugfix/list-all-team
- dev-next
- dev-feature/hub-next
- dev-feature/next-sort-positions
- dev-feature/next-fix-uuid
- dev-feature/next-exceptions
- dev-feature/next-get-by-order
- dev-feature/next-change-requests
- dev-feature/auth-middleware
- dev-feature/user-get-where-query
- dev-feature/companies-change
- dev-feature/cache-barra-me
This package is auto-updated.
Last update: 2024-09-10 15:02:52 UTC
README
简介
国际空间站(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)。有关更多信息,请参阅 许可证文件。