新增职务权限管理与聊天室管理权限控制
This commit is contained in:
@@ -16,9 +16,13 @@ use App\Jobs\SaveMessageJob;
|
||||
use App\Models\BaccaratLossCoverEvent;
|
||||
use App\Models\BaccaratLossCoverRecord;
|
||||
use App\Models\BaccaratRound;
|
||||
use App\Models\Department;
|
||||
use App\Models\GameConfig;
|
||||
use App\Models\Position;
|
||||
use App\Models\User;
|
||||
use App\Models\UserPosition;
|
||||
use App\Services\BaccaratLossCoverService;
|
||||
use App\Support\PositionPermissionRegistry;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Queue;
|
||||
@@ -57,7 +61,7 @@ class BaccaratLossCoverControllerTest extends TestCase
|
||||
{
|
||||
Queue::fake();
|
||||
|
||||
$admin = User::factory()->create(['user_level' => 100]);
|
||||
$admin = User::factory()->create(['id' => 1, 'user_level' => 100]);
|
||||
|
||||
$response = $this->actingAs($admin)->postJson(route('command.baccarat_loss_cover.store'), [
|
||||
'title' => '你玩游戏我买单',
|
||||
@@ -76,6 +80,46 @@ class BaccaratLossCoverControllerTest extends TestCase
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证拥有买单活动权限的职务用户也可以创建活动。
|
||||
*/
|
||||
public function test_position_user_with_loss_cover_permission_can_create_event(): void
|
||||
{
|
||||
Queue::fake();
|
||||
|
||||
$admin = $this->createUserWithPermissions([
|
||||
PositionPermissionRegistry::ROOM_BACCARAT_LOSS_COVER,
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($admin)->postJson(route('command.baccarat_loss_cover.store'), [
|
||||
'title' => '职务买单活动',
|
||||
'description' => '职务权限测试',
|
||||
'starts_at' => now()->addMinutes(3)->toDateTimeString(),
|
||||
'ends_at' => now()->addMinutes(33)->toDateTimeString(),
|
||||
'claim_deadline_at' => now()->addHours(6)->toDateTimeString(),
|
||||
]);
|
||||
|
||||
$response->assertOk()->assertJson(['ok' => true]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证高等级但无买单活动权限的用户会被拒绝。
|
||||
*/
|
||||
public function test_high_level_user_without_loss_cover_permission_cannot_create_event(): void
|
||||
{
|
||||
$admin = User::factory()->create(['user_level' => 100]);
|
||||
|
||||
$response = $this->actingAs($admin)->postJson(route('command.baccarat_loss_cover.store'), [
|
||||
'title' => '无权限活动',
|
||||
'description' => '测试活动',
|
||||
'starts_at' => now()->addMinutes(5)->toDateTimeString(),
|
||||
'ends_at' => now()->addMinutes(35)->toDateTimeString(),
|
||||
'claim_deadline_at' => now()->addDay()->toDateTimeString(),
|
||||
]);
|
||||
|
||||
$response->assertStatus(403);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证活动进行中下注会挂到活动并写入用户聚合记录。
|
||||
*/
|
||||
@@ -331,4 +375,45 @@ class BaccaratLossCoverControllerTest extends TestCase
|
||||
'source' => CurrencySource::BACCARAT_LOSS_COVER_CLAIM->value,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建带指定聊天室权限的在职职务用户。
|
||||
*
|
||||
* @param list<string> $permissions
|
||||
*/
|
||||
private function createUserWithPermissions(array $permissions): User
|
||||
{
|
||||
$user = User::factory()->create([
|
||||
'user_level' => 90,
|
||||
]);
|
||||
|
||||
$department = Department::create([
|
||||
'name' => '买单活动部'.$user->id,
|
||||
'rank' => 90,
|
||||
'color' => '#15803d',
|
||||
'sort_order' => 1,
|
||||
'description' => '买单活动权限测试',
|
||||
]);
|
||||
|
||||
$position = Position::create([
|
||||
'department_id' => $department->id,
|
||||
'name' => '买单活动职务'.$user->id,
|
||||
'icon' => '🎁',
|
||||
'rank' => 90,
|
||||
'level' => 90,
|
||||
'sort_order' => 1,
|
||||
'permissions' => $permissions,
|
||||
]);
|
||||
|
||||
UserPosition::create([
|
||||
'user_id' => $user->id,
|
||||
'position_id' => $position->id,
|
||||
'appointed_by_user_id' => null,
|
||||
'appointed_at' => now(),
|
||||
'remark' => '买单活动权限测试',
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
return $user->fresh();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user