get('restricted') === 'true'; $permissions = $request->get('restrictions', null); $ownerId = $request->get('owned_by', null); $entity->restricted = $restricted; $entity->permissions()->delete(); if (!is_null($permissions)) { $entityPermissionData = $this->formatPermissionsFromRequestToEntityPermissions($permissions); $entity->permissions()->createMany($entityPermissionData); } if (!is_null($ownerId)) { $this->updateOwnerFromId($entity, intval($ownerId)); } $entity->save(); $entity->rebuildPermissions(); Activity::addForEntity($entity, ActivityType::PERMISSIONS_UPDATE); } /** * Update the owner of the given entity. * Checks the user exists in the system first. * Does not save the model, just updates it. */ protected function updateOwnerFromId(Entity $entity, int $newOwnerId) { $newOwner = User::query()->find($newOwnerId); if (!is_null($newOwner)) { $entity->owned_by = $newOwner->id; } } /** * Format permissions provided from a permission form to be * EntityPermission data. */ protected function formatPermissionsFromRequestToEntityPermissions(array $permissions): Collection { return collect($permissions)->flatMap(function ($restrictions, $roleId) { return collect($restrictions)->keys()->map(function ($action) use ($roleId) { return [ 'role_id' => $roleId, 'action' => strtolower($action), ]; }); }); } }