commit c91eec05c0f63feb4c2e55db9322901d205b5606
parent 37630d8e86401d994c025798bc007afe0af83470
Author: Felicitus <felicitus@felicitus.org>
Date: Wed, 9 Dec 2015 17:08:06 +0100
Implemented user protection, which allows an administrator to protect a given user against changes
Diffstat:
4 files changed, 85 insertions(+), 15 deletions(-)
diff --git a/src/PartKeepr/AuthBundle/Command/ProtectUserCommand.php b/src/PartKeepr/AuthBundle/Command/ProtectUserCommand.php
@@ -22,8 +22,17 @@ class ProtectUserCommand extends ContainerAwareCommand
{
$userService = $this->getContainer()->get("partkeepr.userservice");
- $user = $userService->getProxyUser($input->getArgument("username"), $userService->getBuiltinProvider());
- $userService->protect($user);
+ $fosUser = $this->getContainer()->get("fos_user.user_manager")->findUserByUsername(
+ $input->getArgument("username")
+ );
+
+ if ($fosUser === null) {
+ $output->writeln(sprintf("User %s not found", $input->getArgument("username")));
+ } else {
+ $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true);
+ $userService->protect($user);
+ $output->writeln(sprintf("User %s protected against changes", $input->getArgument("username")));
+ }
}
}
diff --git a/src/PartKeepr/AuthBundle/Command/UnprotectUserCommand.php b/src/PartKeepr/AuthBundle/Command/UnprotectUserCommand.php
@@ -22,8 +22,17 @@ class UnprotectUserCommand extends ContainerAwareCommand
{
$userService = $this->getContainer()->get("partkeepr.userservice");
- $user = $userService->getProxyUser($input->getArgument("username"), $userService->getBuiltinProvider());
- $userService->unprotect($user);
+ $fosUser = $this->getContainer()->get("fos_user.user_manager")->findUserByUsername(
+ $input->getArgument("username")
+ );
+
+ if ($fosUser === null) {
+ $output->writeln(sprintf("User %s not found", $input->getArgument("username")));
+ } else {
+ $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true);
+ $userService->unprotect($user);
+ $output->writeln(sprintf("User %s unprotected against changes", $input->getArgument("username")));
+ }
}
}
diff --git a/src/PartKeepr/AuthBundle/Entity/User.php b/src/PartKeepr/AuthBundle/Entity/User.php
@@ -137,15 +137,15 @@ class User extends BaseEntity implements UserInterface, EquatableInterface
}
/**
- * @return mixed
+ * @return boolean
*/
- public function getProtected()
+ public function isProtected()
{
return $this->protected;
}
/**
- * @param mixed $protected
+ * @param boolean $protected
*/
public function setProtected($protected)
{
diff --git a/src/PartKeepr/AuthBundle/Tests/UserTest.php b/src/PartKeepr/AuthBundle/Tests/UserTest.php
@@ -2,22 +2,34 @@
namespace PartKeepr\AuthBundle\Tests;
+use Doctrine\Common\DataFixtures\ProxyReferenceRepository;
+use PartKeepr\AuthBundle\Entity\FOSUser;
use PartKeepr\AuthBundle\Entity\User;
use PartKeepr\CoreBundle\Tests\WebTestCase;
class UserTest extends WebTestCase
{
+ /**
+ * @var ProxyReferenceRepository
+ */
+ protected $fixtures;
+
public function setUp()
{
- $this->loadFixtures(array());
+ $this->fixtures = $this->loadFixtures(
+ array(
+ 'PartKeepr\AuthBundle\DataFixtures\LoadUserData',
+ )
+ )->getReferenceRepository();
}
- public function testCreateUser () {
+ public function testCreateUser()
+ {
$client = static::makeClient(true);
$data = array(
"username" => "foobartest",
- "newPassword" => "1234"
+ "newPassword" => "1234",
);
$client->request("POST", "/api/users", array(), array(), array(), json_encode($data));
@@ -31,7 +43,8 @@ class UserTest extends WebTestCase
$this->assertFalse($response->{"legacy"});
}
- public function testChangeUserPassword () {
+ public function testChangeUserPassword()
+ {
$builtinProvider = $this->getContainer()->get("partkeepr.userservice")->getBuiltinProvider();
$user = new User("bernd");
@@ -63,7 +76,8 @@ class UserTest extends WebTestCase
$this->assertFalse($response->{"legacy"});
}
- public function testSelfChangeUserPassword () {
+ public function testSelfChangeUserPassword()
+ {
$builtinProvider = $this->getContainer()->get("partkeepr.userservice")->getBuiltinProvider();
$user = new User("bernd2");
@@ -76,7 +90,7 @@ class UserTest extends WebTestCase
$client = static::makeClient(false, array(
'PHP_AUTH_USER' => "bernd2",
- 'PHP_AUTH_PW' => "admin"
+ 'PHP_AUTH_PW' => "admin",
)
);
@@ -85,7 +99,7 @@ class UserTest extends WebTestCase
$parameters = array(
"oldpassword" => "admin",
- "newpassword" => "foobar"
+ "newpassword" => "foobar",
);
$client->request("PUT", $iri, $parameters);
@@ -99,7 +113,7 @@ class UserTest extends WebTestCase
$client = static::makeClient(false, array(
'PHP_AUTH_USER' => "bernd2",
- 'PHP_AUTH_PW' => "foobar"
+ 'PHP_AUTH_PW' => "foobar",
)
);
@@ -111,4 +125,42 @@ class UserTest extends WebTestCase
$this->assertObjectHasAttribute("@type", $response);
$this->assertEquals("Error", $response->{"@type"});
}
+
+ public function testUserProtect()
+ {
+ /**
+ * @var FOSUser $fosUser
+ */
+ $fosUser = $this->fixtures->getReference("user.admin");
+ $userService = $this->getContainer()->get("partkeepr.userservice");
+
+
+ $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true);
+
+ /**
+ * @var User $user
+ */
+ $userService->protect($user);
+
+ $this->assertTrue($user->isProtected());
+ }
+
+ public function testUserUnprotect()
+ {
+ /**
+ * @var FOSUser $fosUser
+ */
+ $fosUser = $this->fixtures->getReference("user.admin");
+ $userService = $this->getContainer()->get("partkeepr.userservice");
+
+
+ $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true);
+
+ /**
+ * @var User $user
+ */
+ $userService->unprotect($user);
+
+ $this->assertFalse($user->isProtected());
+ }
}