feat(admin): 统一后台权限注册表并移除路由中间件鉴权

This commit is contained in:
2026-05-19 09:34:31 +08:00
parent 4cf561cd57
commit 063cb98311
19 changed files with 519 additions and 389 deletions

View File

@@ -3,7 +3,7 @@
use App\Models\AdminUser;
use App\Lottery\ErrorCode;
use Illuminate\Support\Str;
use App\Services\AdminCaptchaService;
use Illuminate\Support\Facades\Cache;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
@@ -22,14 +22,17 @@ test('admin login returns bearer token when captcha passes validation', function
'status' => 0,
]);
$mock = Mockery::mock(AdminCaptchaService::class);
$mock->shouldReceive('verify')->once()->andReturn(true);
$this->instance(AdminCaptchaService::class, $mock);
$captchaKey = (string) Str::uuid();
Cache::put(
'admin_captcha:'.$captchaKey,
hash_hmac('sha256', 'xwz2', (string) config('app.key')),
now()->addSeconds(120),
);
$resp = $this->postJson('/api/v1/admin/auth/login', [
'account' => 'Tester',
'password' => 'secret-strong',
'captcha_key' => (string) Str::uuid(),
'captcha_key' => $captchaKey,
'captcha_code' => 'xwz2',
]);
@@ -37,7 +40,10 @@ test('admin login returns bearer token when captcha passes validation', function
->assertJsonPath('code', ErrorCode::Success->value)
->assertJsonPath('data.admin.username', 'tester')
->assertJsonPath('data.admin.nickname', '测试昵称')
->assertJsonStructure(['data' => ['token', 'token_type', 'admin' => ['id', 'username', 'nickname', 'email', 'permissions']]]);
->assertJsonPath('data.admin.navigation.0.segment', 'dashboard')
->assertJsonPath('data.admin.navigation.0.href', '/admin')
->assertJsonPath('data.admin.navigation.1.segment', 'settings')
->assertJsonStructure(['data' => ['token', 'token_type', 'admin' => ['id', 'username', 'nickname', 'email', 'permissions', 'navigation']]]);
$token = $resp->json('data.token');
expect($token)->not->toBeNull();
@@ -69,14 +75,17 @@ test('login rejects wrong password with masked message', function () {
'status' => 0,
]);
$mock = Mockery::mock(AdminCaptchaService::class);
$mock->shouldReceive('verify')->andReturn(true);
$this->instance(AdminCaptchaService::class, $mock);
$captchaKey = (string) Str::uuid();
Cache::put(
'admin_captcha:'.$captchaKey,
hash_hmac('sha256', 'aaaa', (string) config('app.key')),
now()->addSeconds(120),
);
$this->postJson('/api/v1/admin/auth/login', [
'account' => 'bad_tester',
'password' => 'wrong-password',
'captcha_key' => (string) Str::uuid(),
'captcha_key' => $captchaKey,
'captcha_code' => 'aaaa',
])->assertUnauthorized()
->assertJsonPath('code', ErrorCode::AdminCredentialsInvalid->value);