Skip to content

Instantly share code, notes, and snippets.

@oshliaer
Last active May 24, 2018 13:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oshliaer/c367cd3a24a2c2a92b83eef3ef2e07ea to your computer and use it in GitHub Desktop.
Save oshliaer/c367cd3a24a2c2a92b83eef3ef2e07ea to your computer and use it in GitHub Desktop.
Эффективный пользователь против Активного

Эффективный пользователь против Активного

Unsplash

Немного ясности в вопрос эффективного и активного пользователя.

В триггерах

googlemail.com

Если у вас googlemail.com аккунт, то дальше можно не читать. Единственный доступный пользователь в доменном множестве только данный пользователь, он же является ActiveUser. Логично предположить, что текущий пользователь (EffectiveUser) ничего из себя представлять не может (анонимус), потому что это, #$%ть, "раскрытие данных".

custom domain

По идее, не правильно, что доменный ползователь может раскрыть текущего внешнего пользователя, но это возможно. При запуске триггера от имени доменного пользователя, он является ActiveUser, а текущий пользователь - EffectiveUser. (На данный момент 2017-05-25 эта фича не доступна)

Куяк-куяк

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

Мне лень читать. Ок, два правила:

  • Один файл - ОДИН триггер
  • Триггер должен быть зарегистрирован.
  • Дополнение к п.2 Путь это будет Владелец.

Наконец-то пример

В примере https://docs.google.com/spreadsheets/d/1O4uPDnM_YZ8uQFdTnaQJe6nkWCRf0ZlRmqk1XaNrP_I/edit?usp=sharing находится прикрепленный тут код. Раскрывается ваш email

Куда пилить?

Если не предоставлять доступ "Всем вокруг", а определенному конечному числу редакторов, то появляется возможность определить effectiveUser из списка редакторов.

В веб-приложении

Coming soon...

function onedit(e) {
try{
var activeUser = Session.getActiveUser().getEmail();
var effectiveUser = Session.getEffectiveUser().getEmail();
e.range.setNote(Utilities.formatString('%s\nActive User: %s\nEffective User: %s', new Date(), activeUser, effectiveUser));
}catch(err){
SpreadsheetApp.getActiveSpreadsheet().toast(err, -1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment