Гибридные мобильные приложения. Часть 5: Cloud Code и безопасность в Parse приложениях

По мере решения задач, описанных в предыдущих статьях, у нас накопилось небольшое количество кода. Таким образом, родилась тема для нового текста. Эту статью мы начнем с рефакторинга кода приложения для приведения его в соответствие HMVC архитектуре. Код не будет идеальным. По большому счету, он останется прежним. Изменится лишь подход к реализации. Код приложения размещен на GitHub. Материалы, посвященные этой статье, вынесены в отдельную ветку refactoring.

Приступим. Файл с маршрутизацией приложения стал достаточно велик. Да и количество шаблонов в папке templates заметно увеличилось. Первое, что мы сделаем — это разделение накопившегося добра на директории модулей приложения.

Для размещения шаблонов мы создадим саб-директорию templates. При этом не забудем поменять пути к ним в созданных файлах маршрутизации. Аналогично поступаем со всеми модулями приложения. Не забываем подключить новые файлы маршрутов в index.html.

Общая директория templates предназначается для хранения общих шаблонов. Кроме того, остается глобальный файл маршрутизации router.js с описанием состояния по умолчанию.

С помощью перечисленных (довольно простых) манипуляций учебное приложение стало чуть ближе к практике построения HMVC архитектуры.

Безопасность в Parse приложениях

Следующий объект нашего внимания — это безопасность Parse приложений. Для начала напомним, как используется API от Parse.com

hybrid-mobile-app-5.1.

У нас, как владельцев приложения, есть App ID и набор ключей, которые можно разделить на два типа:

  • Клиентские ключи для различных SDK;
  • MasterKey.

Ключ MasterKey игнорирует любые настройки приватности, поэтому он ни в коем случае не должен попасть в приложение. Parse позволяет настроить доступ к данным, добавив ограничение на класс или на каждую строку класса. Благодаря этому, мы можем определить, кто получит доступ к данным для всего класса, либо для его отдельной записи (экземпляра).

Доступ к классу/объекту можно определить для:

  1. Пользователя или группы пользователей;
  2. Роли или группы ролей.

Казалось бы, это именно то, что нам нужно. Данные в нашем приложении относятся к пользователю, соответственно получать их должен только он. Такой подход оправдан, мы считаемым его приемлемым по большинству параметров. Единственный существенный недостаток этой парадигмы касается предоставления доступа к одному объекту сразу нескольким пользователям.

Поясним на примере: допустим у нас есть User#1 и User#2,

Чтобы дать User#2 доступ к заметке User#1, мы можем создать роль FriendOf_1 и назначить ее User#2, а также разрешить доступ этой роли ко всем объектам User#1. Согласитесь, если пользователей много, это не очень удобно.

Гораздо более простым и эффективным выглядит другой подход:

  • Запрещаем доступ ко всем классам

hybrid-mobile-app-5.2-1024x629

  • Переносим логику выборки данных в Cloud Code и выполняем все запросы там с использованием MasterKey.

Таким образом, мы добиваемся максимального уровня безопасности, а также получаем возможность менять логику приложения, не выпуская новых релизов.

И еще. Кроме всего, с чем мы ознакомились по ходу выполнения учебных заданий, Parse позволяет создавать полноценный серверный код приложения. Принцип работы прост, как лопата. К недостаткам можно смело относить лишь неудобства в отладке такого кода. Для его хранения следует завести отдельный репозиторий. Таковы правила хорошего тона. В учебном примере мы проигнорируем эту рекомендацию и разместим весь материал в одном репозитории. Не забывайте — наш девиз: увеличение скорости за счет снижения качества:)

Cloud Code

А теперь начнем работу с Cloud Code. Шаг первый: установка консольного инструмента Parse:

Создаем новое приложение:

При деплое на сервер зальется текущий локальный код. Обозначаем спектр хороших привычек:

  1. Предупредить свою команду, что хотите поработать с Cloud Code.
  2. Оставить описание, что это debuging, например parse deploy —description=”debuging”.
  3. При деплое готового варианта кода оставить комментарий из последнего коммита

Перейдем к коду. Создадим файлы для функций, соответсвующие модулям приложения и подключим их в файле main.js

Определим, что мы всегда должны использовать MasterKey. Так как доступ к этому коду есть только у нас, это решение вполне безопасно. Использование MasterKey не обязательно должно носить глобальный характер. Допускается локальное применение кода внутри любой из функций или даже для каждого запроса к базе данных. Наличие выбора — это всегда хорошо.

Пример преобразования кода для модуля привычек с учетом использования Cloud Code:

Для выполнения кода на стороне сервера мы определили функцию, включающую в себя необходимую нам логику:

Она содержит два основных параметра — request и response. Использование функции обязательно должно прийти к какому-либо конечному результату:

  • успешному —  response.success(habitFailure);
  • или не очень — response.error(‘Not authorized’);

Функция выполняется в течение 15 секунд. Что еще нужно отметить? Функция может вернуть только один объект, поэтому:

Входные данные хранятся в request.params, но мы не можем передать сюда объект со стороны приложения (только файл). В этой связи, следует получить идентификатор, найти объект и произвести с ним необходимые манипуляции. Ничего сложного. Если же объект нам нужен только  для построения связи, мы можем запросто его забилдить:

На стороне клиентского приложения мы должны вызвать такую функцию:


Продемонстрируем, как проявят себя изменения кода контроллера на стороне клиентского приложения:


Перед вами лишь фрагмент кода. С полной версией вы можете ознакомиться на GitHub.

Вызываем удаленную функцию и обновляем интерфейс при ее завершении.

Ну и, как водится, подводим итоги. Cloud Code — отличный инструмент для организации серверной логики. Однако этим его возможности не ограничиваются. Например, вы можете использовать Cloud Code для отправки писем или sms с помошью SendGrid или Twillio. Он способен изменять размер изображения на стороне сервера, отправлять push-уведомления и справляться с массой полезных мелочей.

В следующей статье этого цикла мы рассмотрим моменты, посвященные развертыванию веб-версии нашего приложения.

Не переключайтесь.

Будьте в курсе всех агро новостей

Ищи больше интересной информации в нашем TG-канале Подписаться

Похожие статьи

Заполните форму или свяжитесь
удобным для Вас способом

Контакты

г. Севастополь, ул. Руднева, д.41, 4 этаж технопарк ИТ-Крым +7 978 679-76-353 agro@crimeadigital.ru

Социальные сети

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!

Лицензия на образовательную деятельность

В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.
В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.

Мы вошли в Реестр эффективно и социально значимых предприятий.

По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!
По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!