2013-10-30 61 views

回答

7

是的,這不是最容易做的事情,但它是可能的。

但是在開始之前,瞭解Google電子表格/表格保護工作原理非常重要。

無法保護來自文件所有者的工作表或範圍。所以,如果你還想保護自己的文件(假設你是所有者)。然後,現在唯一可用的解決方案(我希望他們將來會改變這種方案)是將文件的所有權更改爲另一個帳戶。大多數人所做的就是使用另一個Google帳戶,他們不會主動使用(如果您還沒有帳戶,可以輕鬆創建一個虛假的帳戶)。

然後,在將文件傳輸到另一個帳戶後,您可以使用常規GUI輕鬆地鎖定對範圍,工作表或整個電子表格的更改。

好的,現在到腳本。腳本運行時,始終使用特定帳戶的授權,並且可以執行此帳戶可以執行的所有操作。例如,當某人直接從腳本編輯器運行腳本,或者單擊自定義菜單或圖像時:它會在誰點擊的帳戶下運行。但是,如果你設置了一個installable trigger,那麼腳本總是在首先設置觸發器的人(不是誰在執行實際觸發它的動作)的帳戶下運行。 Simple event triggers作爲觸發行爲的人(您可以匿名思考)運行,但他們做不了多少,這是一個安全功能(請閱讀鏈接以獲得更好的理解)。

最後,當一個人將腳本作爲網絡應用程序發佈時,則有一個選擇框用於選擇腳本作爲開發人員還是用戶運行。很簡單。

回到問題。因爲我們已經鎖定了每個人從所需的表/範圍。對於腳本來更改此鎖定區域,它必須以文件所有者的身份運行!

如果您所做的更改是自動的,例如,通過一個可安裝的觸發器,那麼你很好。只需使用文件所有者帳戶設置觸發器即可。此外,如果您的用戶正在「外部」訪問腳本,即通過網絡應用程序。然後,這很容易,只需將Web應用程序設置爲開發人員(文件所有者)即可運行。

最複雜的情​​況是,如果您需要從自定義菜單運行腳本,然後該自定義菜單將以單擊它的權限運行,而這些權限本身無法更改受保護區域。解決方案是將腳本部署爲以開發人員身份運行的web-app,並使用按鈕單擊來運行功能,以便使用UrlFetch調用已部署的url,可能會傳遞一些參數來指定需要完成的操作。然後,由於webapp作爲開發者(文件所有者)運行,因此它可以進行所需的任何更改,並將任何值(通常爲JSON)返回(如果有返回值的話)給調用函數(它作爲用戶,並與他的會話相關聯),因此您可以在彈出式窗口或烤麪包機上向他顯示消息等。

這是一種棘手的問題,但效果很好,您可以對電子表格中包含的同一個腳本執行所有操作。但是,如果您擔心用戶可能訪問腳本編輯器並更改代碼(這是可能的),那麼您應該將Web應用程序部分分離到不同的文件中,而不需要與他們共享。

+0

雖然我很久以前就問過了,但我最近纔開始實施這個。爲了防止用戶查看和編輯腳本,該文件是否需要在另一個帳戶中?創建腳本時,我找不到任何與共享相關的設置。 – koplersky

+1

Apps腳本團隊改變了Spreadsheet容器限制腳本的共享工作方式,[請參閱此處](https://developers.google.com/apps-script/releases/2012#june_8_2012)。所以現在,正如他們所建議的那樣,如果你想保護代碼,你將不得不使用庫,但是,包含的導入庫的代碼仍然是可編輯的。 –

0

是的,但只適用於其他人,而不是腳本所有者。只需使用2個賬戶作爲所有者,另一個賬戶作爲讀者。

相關問題