I want to add permission people who can access my site using spreadsheet. From More>Sharing & Permission > Add people I can do that manually but I'm thinking if its possible I place email address whom to share on a spreadsheet and Google site automatically allow access to them.
Is that possible? Any appscript/way to do that? If so where is the documentation/way to do that? Did some Google search but couldn't find such data.
Update [Site must be "Private" to work removeViewer] Following code can successfully add & delete new viewers. But it can't update users when new row (email address) is added. It gives following error: "Service error: SitesApp: AclEntry already exists added"
// These globals should be customized for your site
var domain = ''; // Leave blank for consumer account
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Update Viewers",
functionName : "updateSiteViewersUI"
}];
sheet.addMenu("Site Utilities", entries);
};
/**
* Spreadsheet UI wrapper for updateSiteViewers()
*/
function updateSiteViewersUI() {
var result = updateSiteViewers();
Browser.msgBox('Site Viewers updated',
'Added: '+result.added+'\\nRemoved:'+result.removed,
Browser.Buttons.OK)
}
/**
* Reads email addresses from Column A, skipping a header line, and uses
* them to update Viewer permissions on the Google Site.
*/
function updateSiteViewers() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var values = rows.getValues();
// Get user list from sheet
var sheetUsers = [];
for (var i = 1; i < values.length; i++) {
var row = values[i];
sheetUsers.push(row[0]); // build array of users
}
// uniqueFrom
Array.prototype.uniqueFrom = function() {
if (!arguments.length)
return [];
var a1 = this.slice(0); // Start with a copy
for (var n=0; n < arguments.length; n++) {
var a2 = arguments[n];
if (!(a2 instanceof Array))
throw new TypeError( 'argument ['+n+'] must be Array' );
for(var i=0; i<a2.length; i++) {
var index = a1.indexOf(a2[i]);
if (index > -1) {
a1.splice(index, 1);
}
}
}
return a1;
}
// Get user list from consumer site
var site = SitesApp.getSiteByUrl("https://sites.google.com/site/xyz/");
Logger.log(site.getName());
var siteViewers = site.getViewers();
/**
* Returns a non-destructive Array of elements that are not found in
* any of the parameter arrays.
*
* @param {...Array} var_args Arrays to compare.
*/
// Compare lists to find out what work we need to do
var viewersToAdd = sheetUsers.uniqueFrom(siteViewers);
var viewersToRemove = siteViewers.uniqueFrom(sheetUsers);
// Update the Viewers list
// Note - We could just add everyone, since the API ignores duplicates,
// but then we wouldn't know how many changes there were.
site.addViewers(viewersToAdd);
for (var j=0; j < viewersToRemove.length; j++) {
site.removeViewer(viewersToRemove[j]);
}
return {added:viewersToAdd.length, removed:viewersToRemove.length};
};