*/ public function index(GetSubuserRequest $request, Server $server): array { return $this->fractal->collection($server->subusers) ->transformWith($this->getTransformer(SubuserTransformer::class)) ->toArray(); } /** * View subusers * * Returns a single subuser associated with this server instance. * * @return array */ public function view(GetSubuserRequest $request, Server $server, User $user): array { $subuser = $request->attributes->get('subuser'); return $this->fractal->item($subuser) ->transformWith($this->getTransformer(SubuserTransformer::class)) ->toArray(); } /** * Create subuser * * Create a new subuser for the given server. * * @return array * * @throws DataValidationException * @throws ServerSubuserExistsException * @throws UserIsServerOwnerException * @throws Throwable */ public function store(StoreSubuserRequest $request, Server $server): array { $email = $request->input('email'); $permissions = $this->getCleanedPermissions($request); $subuser = $this->creationService->handle($server, $email, $permissions); Activity::event('server:subuser.create') ->subject($subuser->user) ->property(['email' => $email, 'permissions' => $subuser->permissions]) ->log(); return $this->fractal->item($subuser) ->transformWith($this->getTransformer(SubuserTransformer::class)) ->toArray(); } /** * Update subuser * * Update a given subuser in the system for the server. * * @return array * * @throws DataValidationException */ public function update(UpdateSubuserRequest $request, Server $server, User $user): array { /** @var Subuser $subuser */ $subuser = $request->attributes->get('subuser'); $this->updateService->handle($subuser, $server, $this->getCleanedPermissions($request)); return $this->fractal->item($subuser->refresh()) ->transformWith($this->getTransformer(SubuserTransformer::class)) ->toArray(); } /** * Delete subuser * * Removes a subusers from a server's assignment. */ public function delete(DeleteSubuserRequest $request, Server $server, User $user): JsonResponse { /** @var Subuser $subuser */ $subuser = $request->attributes->get('subuser'); $this->deletionService->handle($subuser, $server); return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT); } /** * Returns the "cleaned" permissions for subusers and parses out any permissions * that were passed that do not also exist in the internally tracked list of * permissions. * * @return string[] */ protected function getCleanedPermissions(Request $request): array { return collect($request->input('permissions') ?? []) ->intersect(Subuser::allPermissionKeys()) ->push(SubuserPermission::WebsocketConnect->value) ->unique() ->values() ->toArray(); } }