blessing-skin-server/app/Providers/AuthServiceProvider.php
521141 b0f59652b4
修复请求的 scope没有被 Laravel Passport 正确注册
用 Laravel Passport + League OAuth2 Server + yggdrasil-connect 插件时,请求的 scope(如 Yggdrasil.PlayerProfiles.Select、Yggdrasil.Server.Join)没有被 Laravel Passport 正确注册
2025-06-26 13:23:50 +08:00

58 lines
2.6 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Cache;
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
/**
* The model to policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
];
/**
* Register any authentication / authorization services.
*/
public function boot(): void
{
$defaultScopes = [
'User.Read' => 'auth.oauth.scope.user.read',
'Notification.Read' => 'auth.oauth.scope.notification.read',
'Notification.ReadWrite' => 'auth.oauth.scope.notification.readwrite',
'Player.Read' => 'auth.oauth.scope.player.read',
'Player.ReadWrite' => 'auth.oauth.scope.player.readwrite',
'Closet.Read' => 'auth.oauth.scope.closet.read',
'Closet.ReadWrtie' => 'auth.oauth.scope.closet.readwrite',
'UsersManagement.Read' => 'auth.oauth.scope.users-management.read',
'UsersManagement.ReadWrite' => 'auth.oauth.scope.users-management.readwrite',
'PlayersManagement.Read' => 'auth.oauth.scope.players-management.read',
'PlayersManagement.ReadWrite' => 'auth.oauth.scope.players-management.readwrite',
'ClosetManagement.Read' => 'auth.oauth.scope.closet-management.read',
'ClosetManagement.ReadWrite' => 'auth.oauth.scope.closet-management.readwrite',
'ReportsManagement.Read' => 'auth.oauth.scope.reports-management.read',
'ReportsManagement.ReadWrite' => 'auth.oauth.scope.reports-management.readwrite',
];
// 添加 Yggdrasil Connect 插件的作用域
$yggdrasilScopes = [
'openid' => 'LittleSkin\\YggdrasilConnect::scopes.openid',
'profile' => 'LittleSkin\\YggdrasilConnect::scopes.profile',
'email' => 'LittleSkin\\YggdrasilConnect::scopes.email',
'offline_access' => 'LittleSkin\\YggdrasilConnect::scopes.offline-access',
'Yggdrasil.PlayerProfiles.Read' => 'LittleSkin\\YggdrasilConnect::scopes.player-profiles.read',
'Yggdrasil.PlayerProfiles.Select' => 'LittleSkin\\YggdrasilConnect::scopes.player-profiles.select',
'Yggdrasil.Server.Join' => 'LittleSkin\\YggdrasilConnect::scopes.server.join',
];
$scopes = Cache::get('scopes', []);
Passport::tokensCan(array_merge($defaultScopes, $yggdrasilScopes, $scopes));
Passport::setDefaultScope(['User.Read']);
}
}