voter = new PermissionVoter(); } public function testGrantsWhenUserHasPermission(): void { $user = new User('admin@test.com', 'hash'); $user->grantPermission('articles.publish'); $token = new UsernamePasswordToken($user, 'main', $user->getRoles()); self::assertSame(VoterInterface::ACCESS_GRANTED, $this->voter->vote($token, null, ['PERM_articles.publish'])); } public function testDeniesWhenUserLacksPermission(): void { $user = new User('user@test.com', 'hash'); $token = new UsernamePasswordToken($user, 'main', $user->getRoles()); self::assertSame(VoterInterface::ACCESS_DENIED, $this->voter->vote($token, null, ['PERM_articles.publish'])); } public function testAbstainsForNonPrefixedAttribute(): void { $user = new User('user@test.com', 'hash'); $token = new UsernamePasswordToken($user, 'main', $user->getRoles()); self::assertSame(VoterInterface::ACCESS_ABSTAIN, $this->voter->vote($token, null, ['ROLE_ADMIN'])); } public function testDeniesAfterPermissionRevoked(): void { $user = new User('user@test.com', 'hash'); $user->grantPermission('articles.delete'); $user->revokePermission('articles.delete'); $token = new UsernamePasswordToken($user, 'main', $user->getRoles()); self::assertSame(VoterInterface::ACCESS_DENIED, $this->voter->vote($token, null, ['PERM_articles.delete'])); } }