/
evo
/
docviz
Обзор
Документация
Войти
/
evo
/
docviz
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
tests/Feature/UserGatesTest.php
141 строка
6 KB
evo
Initial commit
04 фев 2026, 17:00
04 фев 2026, 17:00
6132ae5
Код
Авторство
О чём код?
<?php namespace Tests\Feature; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Gate; use Tests\TestCase; class UserGatesTest extends TestCase { use RefreshDatabase; protected function setUp(): void { parent::setUp(); User::unguard(); } protected function tearDown(): void { User::reguard(); parent::tearDown(); } private function makeUser(string $role, ?int $id = null): User { return User::factory()->create(array_filter([ 'id' => $id, 'role' => $role, ], fn ($value) => $value !== null)); } public function test_admin_id1_can_manage_everyone(): void { $admin1 = $this->makeUser('admin', 1); $admin2 = $this->makeUser('admin'); $user = $this->makeUser('user'); foreach ([$admin1, $admin2, $user] as $target) { $this->assertTrue(Gate::forUser($admin1)->allows('viewUser', $target)); $this->assertTrue(Gate::forUser($admin1)->allows('updateUser', $target)); $this->assertTrue(Gate::forUser($admin1)->allows('deleteUser', $target)); $this->assertTrue(Gate::forUser($admin1)->allows('restoreUser', $target)); $this->assertTrue(Gate::forUser($admin1)->allows('forceDeleteUser', $target)); } $this->assertTrue(Gate::forUser($admin1)->allows('viewAnyUser')); $this->assertTrue(Gate::forUser($admin1)->allows('createUser')); } public function test_other_admin_cannot_act_on_admin_id1(): void { $admin1 = $this->makeUser('admin', 1); $admin2 = $this->makeUser('admin'); $user = $this->makeUser('user'); $this->assertFalse(Gate::forUser($admin2)->allows('viewUser', $admin1)); $this->assertFalse(Gate::forUser($admin2)->allows('updateUser', $admin1)); $this->assertFalse(Gate::forUser($admin2)->allows('deleteUser', $admin1)); $this->assertFalse(Gate::forUser($admin2)->allows('restoreUser', $admin1)); $this->assertFalse(Gate::forUser($admin2)->allows('forceDeleteUser', $admin1)); $this->assertTrue(Gate::forUser($admin2)->allows('viewAnyUser')); $this->assertTrue(Gate::forUser($admin2)->allows('createUser')); $this->assertTrue(Gate::forUser($admin2)->allows('viewUser', $user)); $this->assertTrue(Gate::forUser($admin2)->allows('updateUser', $user)); $this->assertTrue(Gate::forUser($admin2)->allows('deleteUser', $user)); } public function test_moderator_limits(): void { $admin1 = $this->makeUser('admin', 1); $admin2 = $this->makeUser('admin'); $moderator = $this->makeUser('moderator'); $user = $this->makeUser('user'); $this->assertFalse(Gate::forUser($moderator)->allows('viewUser', $admin1)); $this->assertFalse(Gate::forUser($moderator)->allows('updateUser', $admin1)); $this->assertFalse(Gate::forUser($moderator)->allows('deleteUser', $admin1)); $this->assertTrue(Gate::forUser($moderator)->allows('viewUser', $admin2)); $this->assertFalse(Gate::forUser($moderator)->allows('updateUser', $admin2)); $this->assertFalse(Gate::forUser($moderator)->allows('deleteUser', $admin2)); $this->assertTrue(Gate::forUser($moderator)->allows('viewUser', $user)); $this->assertTrue(Gate::forUser($moderator)->allows('updateUser', $user)); $this->assertTrue(Gate::forUser($moderator)->allows('deleteUser', $user)); $this->assertTrue(Gate::forUser($moderator)->allows('viewAnyUser')); $this->assertTrue(Gate::forUser($moderator)->allows('createUser')); $this->assertFalse(Gate::forUser($moderator)->allows('restoreUser', $user)); $this->assertFalse(Gate::forUser($moderator)->allows('forceDeleteUser', $user)); } public function test_editor_limits(): void { $admin1 = $this->makeUser('admin', 1); $admin2 = $this->makeUser('admin'); $editor = $this->makeUser('editor'); $user = $this->makeUser('user'); $this->assertFalse(Gate::forUser($editor)->allows('viewUser', $admin1)); $this->assertFalse(Gate::forUser($editor)->allows('viewUser', $admin2)); $this->assertFalse(Gate::forUser($editor)->allows('viewUser', $user)); $this->assertFalse(Gate::forUser($editor)->allows('updateUser', $admin1)); $this->assertFalse(Gate::forUser($editor)->allows('updateUser', $admin2)); $this->assertTrue(Gate::forUser($editor)->allows('updateUser', $user)); $this->assertFalse(Gate::forUser($editor)->allows('deleteUser', $admin1)); $this->assertFalse(Gate::forUser($editor)->allows('deleteUser', $admin2)); $this->assertFalse(Gate::forUser($editor)->allows('deleteUser', $user)); $this->assertFalse(Gate::forUser($editor)->allows('viewAnyUser')); $this->assertTrue(Gate::forUser($editor)->allows('createUser')); $this->assertFalse(Gate::forUser($editor)->allows('restoreUser', $user)); $this->assertFalse(Gate::forUser($editor)->allows('forceDeleteUser', $user)); } public function test_regular_user_limits(): void { $user1 = $this->makeUser('user'); $user2 = $this->makeUser('user'); $this->assertTrue(Gate::forUser($user1)->allows('viewUser', $user1)); $this->assertFalse(Gate::forUser($user1)->allows('viewUser', $user2)); $this->assertTrue(Gate::forUser($user1)->allows('updateUser', $user1)); $this->assertFalse(Gate::forUser($user1)->allows('updateUser', $user2)); $this->assertFalse(Gate::forUser($user1)->allows('deleteUser', $user1)); $this->assertFalse(Gate::forUser($user1)->allows('deleteUser', $user2)); $this->assertFalse(Gate::forUser($user1)->allows('viewAnyUser')); $this->assertFalse(Gate::forUser($user1)->allows('createUser')); $this->assertFalse(Gate::forUser($user1)->allows('restoreUser', $user1)); $this->assertFalse(Gate::forUser($user1)->allows('forceDeleteUser', $user1)); } }