Гибридные мобильные приложения. Часть 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-уведомления и справляться с массой полезных мелочей.

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

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

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

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

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

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

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

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

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

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

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

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

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

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

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