From 84125667a87dfcb536f0700fe1dd7aed69b9b129 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 21 Mar 2017 16:35:17 +0200 Subject: [PATCH] изменение пользователя + роли --- app/library/App/Constants/AclRoles.php | 1 + app/library/App/Controllers/UserController.php | 37 ++++++++++++++++++++++++++++++++++++- app/library/App/Model/User.php | 8 ++++++-- app/library/App/Resources/UserResource.php | 44 ++++++++++++++++++++++++++++++++++---------- 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/app/library/App/Constants/AclRoles.php b/app/library/App/Constants/AclRoles.php index 6ed528c..1c47ee8 100755 --- a/app/library/App/Constants/AclRoles.php +++ b/app/library/App/Constants/AclRoles.php @@ -11,4 +11,5 @@ class AclRoles const ADMINISTRATOR = 'Administrator'; const ALL_ROLES = [self::UNAUTHORIZED, self::AUTHORIZED, self::USER, self::MANAGER, self::ADMINISTRATOR]; + const ALL_REAL_ROLES = [self::USER, self::MANAGER, self::ADMINISTRATOR]; } \ No newline at end of file diff --git a/app/library/App/Controllers/UserController.php b/app/library/App/Controllers/UserController.php index ee1017d..6e9255f 100755 --- a/app/library/App/Controllers/UserController.php +++ b/app/library/App/Controllers/UserController.php @@ -6,20 +6,36 @@ use PhalconRest\Mvc\Controllers\CrudResourceController; class UserController extends CrudResourceController { + /** + * Accessible fields + * + * @return array + */ public function whitelist() { return [ 'username', 'password', - 'email' + 'email', + 'role' ]; } + /** + * Возвращает текущего залогиненного пользователя + * + * @return mixed + */ public function meAction() { return $this->createResourceResponse($this->userService->getDetails()); } + /** + * Авторизация пользователя через BasicAuth и возвращает токен доступа + * + * @return mixed + */ public function authenticateAction() { $username = $this->request->getUsername(); @@ -42,6 +58,11 @@ class UserController extends CrudResourceController return $this->createArrayResponse($response, 'data'); } + /** + * Регистрация нового пользователя + * + * @return mixed + */ public function registerAction() { $this->beforeHandle(); @@ -84,6 +105,12 @@ class UserController extends CrudResourceController } + /** + * Переопределение входных данных + * + * @param $data + * @return array + */ protected function transformPostData($data) { $result = []; @@ -95,6 +122,14 @@ class UserController extends CrudResourceController return $result; } + /** + * Хеширование пароля + * + * @param $key + * @param $value + * @param $data + * @return string + */ protected function transformPostDataValue($key, $value, $data) { if ($key == 'password') { diff --git a/app/library/App/Model/User.php b/app/library/App/Model/User.php index dd5b024..87c1767 100755 --- a/app/library/App/Model/User.php +++ b/app/library/App/Model/User.php @@ -95,10 +95,14 @@ class User extends DateTrackingModel public function setRole($role) { /** validation: constant value **/ - if (!in_array($role, AclRoles::ALL_ROLES)) + if (!in_array($role, AclRoles::ALL_REAL_ROLES)) { $msg = 'Post-data is invalid, bad `role` value'; - throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['role' => $role]); + throw new Exception( + ErrorCodes::POST_DATA_INVALID, + $msg, + ['role' => $role, 'valid values' => AclRoles::ALL_REAL_ROLES] + ); } /** -------------------------- **/ diff --git a/app/library/App/Resources/UserResource.php b/app/library/App/Resources/UserResource.php index 58376e5..7e6f2fd 100755 --- a/app/library/App/Resources/UserResource.php +++ b/app/library/App/Resources/UserResource.php @@ -30,6 +30,40 @@ class UserResource extends ApiResource { ->name('all') ->description('Возвращает всех зарегистрированных пользователей') ); + + $this + ->endpoint(ApiEndpoint::remove() + ->name('remove') + ->description('Удаление пользователя') + ->allow(AclRoles::USER) + ->exampleResponse([ + "result" => "OK" + ]) + ) + ; + $this + ->endpoint(ApiEndpoint::update() + ->name('update') + ->description('Изменение данных пользователя') + ->allow(AclRoles::ADMINISTRATOR) + ->deny(AclRoles::MANAGER) + ->exampleRequest([ + 'role' => 'Manager' + ]) + ->exampleResponse([ + "result" => "OK", + "user" => [ + "id" => 101, + "username" => "qwerty", + "email" => "1a23@awd.awd", + "role" => "Manager", + "createdAt" => "2017-02-16 19:05:18", + "updatedAt" => "2017-03-21 14:31:48" + ] + ]) + ) + ; + $this ->endpoint(ApiEndpoint::factory('/me', HttpMethods::GET, 'meAction') ->name('me') @@ -78,15 +112,5 @@ class UserResource extends ApiResource { ] ]) ); - $this - ->endpoint(ApiEndpoint::remove() - ->name('remove') - ->description('Удаление пользователя') - ->allow(AclRoles::USER) - ->exampleResponse([ - "result" => "OK" - ]) - ) - ; } } \ No newline at end of file -- libgit2 0.21.4