From dfe659084d973645ccb00b5a031099cc857ca170 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 30 Mar 2023 15:52:45 +0800 Subject: [PATCH] change admin role type --- .../ControllersLogic/UpdateUserLogic.php | 12 +-- .../ControllersLogic/UpdateUserRoleLogic.php | 78 +++++++++++++++++++ .../Modules/Accounts/Services/UpdatesUser.php | 5 +- .../Accounts/Services/UpdatesUserFullName.php | 24 ++++++ .../ValueObjects/Constants/RoleTypes.php | 7 ++ .../Accounts/UpdateUserRoleController.php | 19 +++++ app/Http/Resources/UserResource.php | 4 + .../ChangeAdminRoleTypeFormComponent.vue | 63 +++++++++++++++ .../user/elements/UserComponent.vue | 20 +++++ routes/account.php | 1 + 10 files changed, 225 insertions(+), 8 deletions(-) create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php create mode 100644 app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php create mode 100644 app/Http/Controllers/Accounts/UpdateUserRoleController.php create mode 100644 resources/assets/vue/components/companies/forms/ChangeAdminRoleTypeFormComponent.vue diff --git a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php index 7837c75e..6e252883 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php @@ -4,7 +4,7 @@ namespace App\Classes\Modules\Accounts\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Accounts\Services\UpdatesUser; +use App\Classes\Modules\Accounts\Services\UpdatesUserFullName; use App\Classes\Modules\Accounts\Services\FetchesUser; use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser; use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject; @@ -29,8 +29,8 @@ class UpdateUserLogic extends AbstractControllerLogic /** @var CanUpdateUser */ private $canUpdateUser; - /** @var UpdatesUser */ - private $updatesUser; + /** @var UpdatesUserFullName */ + private $updatesUserFullName; /** @var FetchesUser */ private $fetchesUser; @@ -41,10 +41,10 @@ class UpdateUserLogic extends AbstractControllerLogic * @param UpdatesUser $updatesUser * @param FetchesUser $fetchesUSer */ - public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser) + public function __construct(CanUpdateUser $canUpdateUser, UpdatesUserFullName $updatesUserFullName, FetchesUser $fetchesUser) { $this->canUpdateUser = $canUpdateUser; - $this->updatesUser = $updatesUser; + $this->updatesUserFullName = $updatesUserFullName; $this->fetchesUser = $fetchesUser; } @@ -64,7 +64,7 @@ class UpdateUserLogic extends AbstractControllerLogic $query = $this->fetchesUser->execute(['id' => $request->route('id')]); - $query = $this->updatesUser->execute($query, $object); + $query = $this->updatesUserFullName->execute($query, $object); return $this->resourceResponse(new UserResource($query)); diff --git a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php new file mode 100644 index 00000000..a1309a67 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php @@ -0,0 +1,78 @@ + 'Updated Admin Role', + 'message' => 'You have successfully updated the Admin Role' + ]; + } + + /** @var CanUpdateUser */ + private $canUpdateUser; + + /** @var UpdatesUser */ + private $updatesUser; + + /** @var FetchesUser */ + private $fetchesUser; + + /** + * UpdateAddressLogic constructor. + * @param CanUpdateUser $canUpdateUser + * @param UpdatesUser $updatesUser + * @param FetchesUser $fetchesUSer + */ + public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser) + { + $this->canUpdateUser = $canUpdateUser; + $this->updatesUser = $updatesUser; + $this->fetchesUser = $fetchesUser; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $query = $this->fetchesUser->execute(['id' => $request->route('id')]); + + $object = new UserObject( + $query->name, + $query->email, + $query->password, + $query->password, + $request->input('type'), + $query->status, + ); + + $this->canUpdateUser->passes($object); + + $query = $this->updatesUser->execute($query, $object); + + return $this->resourceResponse(new UserResource($query)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Services/UpdatesUser.php b/app/Classes/Modules/Accounts/Services/UpdatesUser.php index f872b234..f7c6cfab 100644 --- a/app/Classes/Modules/Accounts/Services/UpdatesUser.php +++ b/app/Classes/Modules/Accounts/Services/UpdatesUser.php @@ -3,7 +3,7 @@ namespace App\Classes\Modules\Accounts\Services; use App\Classes\General\Eloquent\AbstractUpdateRecord; -use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject; +use App\Classes\Modules\Accounts\DataTransferObjects\UserObject; use App\Models\User; class UpdatesUser extends AbstractUpdateRecord @@ -15,9 +15,10 @@ class UpdatesUser extends AbstractUpdateRecord * @return \Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(User $model, FullNameObject $object) { + public function execute(User $model, UserObject $object) { $model->name = $object->getName(); + $model->type = $object->getType(); return $this->handler($model); } diff --git a/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php b/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php new file mode 100644 index 00000000..9836e695 --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php @@ -0,0 +1,24 @@ +name = $object->getName(); + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/RoleTypes.php b/app/Classes/ValueObjects/Constants/RoleTypes.php index ec5fe961..11d65564 100644 --- a/app/Classes/ValueObjects/Constants/RoleTypes.php +++ b/app/Classes/ValueObjects/Constants/RoleTypes.php @@ -24,4 +24,11 @@ final class RoleTypes public const DESTINATION_ACCOUNT_ADMIN = 7; + public const USER_TYPE_ID = [ + self::SHADOW_ADMIN => "Shadow Admin", + self::SUPER_ADMIN => "Super Admin", + self::ADMIN => "Admin", + self::USER => "User", + ]; + } \ No newline at end of file diff --git a/app/Http/Controllers/Accounts/UpdateUserRoleController.php b/app/Http/Controllers/Accounts/UpdateUserRoleController.php new file mode 100644 index 00000000..aef992c8 --- /dev/null +++ b/app/Http/Controllers/Accounts/UpdateUserRoleController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 3d052d02..97f4ab38 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -2,6 +2,7 @@ namespace App\Http\Resources; +use App\Classes\ValueObjects\Constants\RoleTypes; use Illuminate\Http\Resources\Json\JsonResource; class UserResource extends JsonResource @@ -14,11 +15,14 @@ class UserResource extends JsonResource */ public function toArray($request) { + $userTypeArray = RoleTypes::USER_TYPE_ID; + return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->email, 'type' => (int) $this->type, + 'type_name' => ($userTypeArray[(int) $this->type]), 'status' => (int) $this->status ]; } diff --git a/resources/assets/vue/components/companies/forms/ChangeAdminRoleTypeFormComponent.vue b/resources/assets/vue/components/companies/forms/ChangeAdminRoleTypeFormComponent.vue new file mode 100644 index 00000000..1705e3fa --- /dev/null +++ b/resources/assets/vue/components/companies/forms/ChangeAdminRoleTypeFormComponent.vue @@ -0,0 +1,63 @@ + + diff --git a/resources/assets/vue/components/user/elements/UserComponent.vue b/resources/assets/vue/components/user/elements/UserComponent.vue index 20b57e6f..01e0ca6c 100644 --- a/resources/assets/vue/components/user/elements/UserComponent.vue +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -31,6 +31,26 @@ +
+
+
+
Role Type
+
+
+
+
+
+ {{item.type_name }} + + + +
+ +
+
+
+
+
diff --git a/routes/account.php b/routes/account.php index 22671aa2..477f9244 100644 --- a/routes/account.php +++ b/routes/account.php @@ -41,6 +41,7 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account Route::post('/admin/create', 'CreateAdminUserController@create')->name('admin.create'); Route::delete('/delete/{id}', 'DeleteUserController@delete')->name('delete'); + Route::put('/update/{id}/role', 'UpdateUserRoleController@update')->name('update.role'); });