
Як масово закрити доступ користувачів до кількох облікових записів Google Analytics
Чому вам це знадобиться
Можливо, як і у мене, у вас виникала потреба закрити доступ до кількох облікових записів Google Analytics для конкретного користувача.
Типові ситуації, коли це необхідно:
- співробітник передає проєкти іншому спеціалісту та більше не бере в них участі;
- людина припиняє працювати в компанії;
- змінюється відповідальний за аналітику в команді.
Закрити доступ через інтерфейс Google Analytics нескладно. Проте, коли таку процедуру потрібно виконувати для кожного облікового запису, а їх декілька, процес стає рутинним і затратним за часом. У таких випадках логічно замислитися над автоматизацією.
У цій статті я поділюся власним скриптом на R, який дозволяє швидко видалити користувача одразу з кількох облікових записів Google Analytics.
Підготовчі роботи
Що знадобиться для початку
- Встановити R на комп’ютер
Офіційний інсталятор доступний на сайті CRAN. - Встановити RStudio
Це зручне середовище розробки для роботи з R. - Встановити необхідні пакети:
Встановлення пакетів
Скопіюйте та виконайте цей код у RStudio:
install.packages("googleAnalyticsR")
library("googleAnalyticsR")
install.packages("googleAuthR")
library("googleAuthR")
install.packages("devtools")
library(devtools)
install_github("AnastasiiaTymoshenko/RGAManagementAPI")
library("RGAManagementAPI")
Для роботи з Google Analytics API необхідно створити проєкт і облікові дані в Google Developer Console.
Послідовність дій
Створіть новий проєкт у консолі розробника.
Перейдіть до розділу «Облікові дані» → «Створити облікові дані».
Оберіть тип OAuth Client ID.
У полі типу застосунку вкажіть «Інші типи».
Завантажте JSON-файл з даними для авторизації.
Цей файл буде використовуватися для підключення до Google Analytics API з R.
Авторизація в Google Analytics API
Вкажіть шлях до завантаженого JSON-файлу в змінній GA_AUTH_FILE та виконайте код:
GA_AUTH_FILE <- "C:/Users/user/Desktop/your_client_id.apps.googleusercontent.com.json"
ga_auth(token = NULL, new_user = FALSE, no_auto = FALSE)
Важливе зауваження
Якщо в подальшому вам потрібно виконувати видалення користувачів під різними Google-акаунтами, встановіть параметр new_user = TRUE, щоб пройти авторизацію під новою поштою.
Далі до списку emails_to_delete внесіть електронні адреси користувачів, для яких потрібно видалити доступи.
У списку може бути як одна пошта, так і декілька. Після цього запустіть відповідний блок коду.
emails_to_delete <- list(
"email_1@gmail.com",
"email_2@gmail.com",
"email_3@gmail.com"
)
Опис скрипту на R
Одна з причин, чому R зручний у роботі, — це велика кількість готових пакетів із вже реалізованими функціями.
Під час створення цього скрипту корисною виявилася функція ga_users_list з пакета googleAnalyticsR. Вона дозволяє отримати список користувачів, які мають доступ до певного облікового запису, ресурсу або представлення в Google Analytics.
Синтаксис функції
ga_users_list(accountId, webPropertyId = NULL, viewId = NULL)
Пояснення параметрів
accountId— ідентифікатор облікового запису Google Analytics;webPropertyId— ідентифікатор ресурсу (property);viewId— ідентифікатор представлення (view).
Якщо потрібно отримати список користувачів на рівні облікового запису, а доступи на рівні ресурсу або представлення не цікавлять, параметри webPropertyId та viewId можна залишити зі значенням NULL.
Приклад використання
Розглянемо найпростіший приклад використання функції ga_users_list для облікового запису OdesSeo.
У змінну acc записується ідентифікатор облікового запису Google Analytics. Його можна знайти в адміністративній панелі Google Analytics у налаштуваннях облікового запису.
Після виконання функції ga_users_list повертається таблиця, яка містить:
- список електронних адрес користувачів, що мають доступ до облікового запису;
- рівні доступу (permissions) кожного користувача.
Ці дані надалі використовуються для автоматизованого видалення доступів потрібним користувачам.
Функція ga_users_list повертає список електронних адрес користувачів, які мають доступ до облікового запису Google Analytics OdesSeo, а також рівні їхніх дозволів.
На скріншоті видно два стовпці з правами доступу: permissions.effective та permissions.local.
Це пов’язано з тим, що в Google Analytics API використовуються ефективні (effective) та локальні (local) дозволи.
Для керування доступами через API застосовуються саме permissions.local.permissions.effective відображають фактичні (успадковані) права користувача з урахуванням ієрархії доступів.
Як працює ієрархія доступів у Google Analytics
Структура Google Analytics має три рівні:
- Обліковий запис (Account)
- Ресурс (Property)
- Подання (View)
На кожному з цих рівнів можна призначати права користувачам.
Основні принципи:
- дозволи успадковуються зверху вниз;
- якщо користувачу надано доступ на рівні облікового запису, він автоматично поширюється на всі ресурси та подання;
- при переході вниз по ієрархії дозволи можуть лише розширюватися;
- локальні дозволи, задані на нижчому рівні, мають вищий пріоритет, ніж успадковані.
Приклад для рівня ресурсу
Під час виклику функції ga_users_list для рівня ресурсу можна побачити, що стовпець permissions.local порожній для більшості користувачів і заповнений лише для одного з них.
Це означає:
- для більшості користувачів доступ було надано на рівні облікового запису, і він просто успадковується;
- для одного користувача частина прав була задана безпосередньо на рівні ресурсу.
У наведеному прикладі:
- право EDIT було надано на рівні облікового запису;
- право MANAGE_USERS — додатково на рівні ресурсу.
Рівні доступу користувачів у Google Analytics
Користувачі можуть мати такі типи доступів:
- MANAGE_USERS (керування) — додавання та видалення користувачів, зміна їхніх дозволів;
- EDIT (редагування) — створення, зміна та видалення облікових записів, ресурсів, подань, фільтрів, цілей тощо, без права керування користувачами;
- COLLABORATE (спільний доступ) — робота зі спільними об’єктами;
- READ_AND_ANALYZE (читання та аналіз) — перегляд даних, створення особистих об’єктів, доступ до спільних об’єктів без можливості змін.
У скрипті в циклі здійснюється перебір усіх облікових записів Google Analytics, до яких має доступ електронна адреса, використана для авторизації. Для кожного облікового запису за допомогою функції ga_users_list отримується список користувачів, які мають до нього доступ.
Якщо серед цих електронних адрес присутня пошта, для якої необхідно закрити доступ, викликається функція видалення прав. Видалення виконується через метод DELETE Google Analytics Management API.
Ті самі дії виконуються і для нижчих рівнів ієрархії — ресурсу (Property) та подання (View).
У разі успішного видалення доступу скрипт виводить повідомлення, у якому зазначається:
- електронна адреса користувача;
- рівень, на якому було закрито доступ (обліковий запис, ресурс або подання).
Якщо для певного облікового запису, ресурсу або подання у вас немає прав на керування користувачами, отримати список користувачів неможливо. У такому випадку скрипт повертає повідомлення про недостатні права для виконання операції.
Повний код скрипта доступний у відкритому репозиторії на GitHub.
Для зручнішого використання логіку видалення доступів винесено в окрему функцію delete_users_permissions.
Щоб скористатися цією функцією, достатньо передати їй список електронних адрес користувачів, для яких потрібно закрити доступ. Після виклику функції скрипт автоматично пройде всі доступні облікові записи, ресурси та подання і виконає видалення доступів там, де це дозволено поточними правами.
Як інтерпретувати результати роботи скрипту
Після успішного виконання скрипту в консолі з’являються повідомлення, які дозволяють зрозуміти, що саме відбулося для кожного облікового запису, ресурсу або подання.
Розглянемо основні варіанти результатів.
1. Користувач мав доступ і він успішно видалений
Якщо електронна адреса (наприклад, email_1@gmail.com) мала доступ до облікового запису, ресурсу або подання, скрипт:
- повідомляє, що доступ знайдено;
- видаляє права користувача на всіх рівнях, де це дозволено.
Типові повідомлення в цьому випадку:
- користувач має доступ до конкретного облікового запису;
- користувача успішно видалено з цього облікового запису.
Це означає, що доступ було фактично знайдено та коректно закрито.
2. Недостатньо прав для перегляду або керування користувачами
Якщо для певного облікового запису, ресурсу або подання у вас немає прав на керування користувачами, скрипт не може:
- переглянути список користувачів;
- видалити або змінити їхні дозволи.
У такому разі виводиться повідомлення про недостатні права доступу для відповідного рівня (обліковий запис, ресурс або подання).
Це нормальна поведінка скрипта і означає, що:
- доступ до цього рівня обмежений поточними правами авторизованої пошти;
- жодних змін для цього рівня виконано не було.
3. Права користувача успадковуються і не можуть бути змінені
Існує ситуація, коли ваша поштова адреса має право на керування, але:
- це право призначене на нижчому рівні (наприклад, на рівні ресурсу);
- а користувач, якого потрібно видалити, має успадковані права з вищого рівня (наприклад, з рівня облікового запису).
У такому випадку скрипт повідомляє, що:
- користувач має доступ;
- права є успадкованими;
- керувати або видаляти такі дозволи з поточного рівня неможливо.
Це обмеження пов’язане з ієрархією доступів Google Analytics і не є помилкою скрипта.
4. Доступ є, але користувачів для видалення не знайдено
Для облікових записів, до яких ви маєте повні права керування, але жодна з поштових адрес зі списку emails_to_delete не має доступу, скрипт не виводить жодних повідомлень.
Це означає, що:
- перевірка виконана;
- користувачі зі списку не мають доступу до цього рівня;
- жодних дій виконувати не потрібно.
Підсумок
Повідомлення, які виводить скрипт, дозволяють чітко зрозуміти:
- де доступ був знайдений і успішно видалений;
- де доступ неможливо змінити через обмеження прав;
- де користувачів зі списку взагалі не існує.
Таким чином, результати роботи скрипта є прозорими та легко інтерпретуються навіть без додаткового логування.
Сподіваюся, цей скрипт буде корисним у вашій роботі.
Запитання або фідбек щодо його використання можна залишати в коментарях або пишіть на пошту – a.tymoshenko@odesseo.com.ua .










