diff --git a/app/Policies/CategoryPolicy.php b/app/Policies/CategoryPolicy.php index fccb02a4b..6a609fed5 100644 --- a/app/Policies/CategoryPolicy.php +++ b/app/Policies/CategoryPolicy.php @@ -79,6 +79,9 @@ class CategoryPolicy extends \TeamTeaTime\Forum\Policies\CategoryPolicy private function canViewCategory(mixed $user): bool { - return $user instanceof User && $user->hasAnyRole(['Admin', 'Moderator']); + // Forum v8 applies category view checks when filtering private category trees. + // Allow any authenticated forum user to see categories while keeping category + // management actions restricted to admins. + return $user instanceof User; } } diff --git a/tests/Unit/Policies/ForumGuestPolicyTest.php b/tests/Unit/Policies/ForumGuestPolicyTest.php index 41b4a115a..a7d2819a7 100644 --- a/tests/Unit/Policies/ForumGuestPolicyTest.php +++ b/tests/Unit/Policies/ForumGuestPolicyTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Tests\Unit\Policies; +use App\Models\User; use App\Policies\CategoryPolicy; use App\Policies\PostPolicy; use App\Policies\ThreadPolicy; @@ -28,6 +29,15 @@ final class ForumGuestPolicyTest extends TestCase $this->assertFalse($policy->view(null, $category)); } + public function test_authenticated_non_staff_user_can_view_categories(): void + { + $policy = new CategoryPolicy; + $category = new Category; + $user = new User; + + $this->assertTrue($policy->view($user, $category)); + } + public function test_guest_thread_actions_are_denied_but_threads_remain_viewable(): void { $policy = new ThreadPolicy;