2015 年 9 月 26 日 土曜日
【Googleサイト】編集はさせないで、ファイルアップロードのみ許可する(1)の続き。Google Apps Scriptによる解決方法をソースコード付きでご紹介。
前回のおさらい。
Google Sitesでは、ページにファイルを添付することができるが、ファイルを添付することができるのは、そのページの編集権限を持ったユーザーだけだ。
閲覧権限だけをもつユーザーに、ファイルのアップロードのみ許可することは、果たして可能なのだろうか。
ファイルキャビネットでファイルをアップロードできるということは、ページを編集できるということ。ページを編集できるということは、ページを削除することだってできるし、ページのURLを変えることだってできるということだ。
何が問題かというと、権限が強すぎるということなのだ。
前回の投稿で触れていた、Google Apps Scriptによる解決方法が検証できたのでソースコードを掲載する。
function doGet(e){
var app = UiApp.createApplication();
var form = app.createFormPanel().setTitle('viwer upload sample').setEncoding('multipart/form-data')
.add(app.createVerticalPanel()
.add(app.createLabel('File:'))
.add(app.createFileUpload().setName('fileName').setId('fileName'))
.add(app.createLabel('Description:'))
.add(app.createTextBox().setName('description').setId('description'))
.add(app.createSubmitButton('Upload'))
);
app.add(form);
return app;
}
function doPost(e){
var app = UiApp.getActiveApplication();
var filePage = SitesApp.getActivePage();
if (e.parameter.fileName.length > 0){
filePage.addHostedAttachment(e.parameter.fileName,
e.parameter.description);
}
app.add(app.createLabel("Upload completed. Please reload page."));
return app;
}
(1) Google sitesで新しいスクリプトを追加(サイト管理 > Appsスクリプト > 新しいスクリプト)をクリックし、表示されるエディタに上記のコードをすべて貼り付ける。初期画面にある
function myFunction() {
}
は削除して頂いて構わない。
(2) 適当な名前をつけてプロジェクトを保存し、一旦エディタを閉じる。
(3) ファイルキャビネットページを開く。
(4) ページを編集 > 挿入 > Appsスクリプトガジェットをクリック。
(5) 作成したスクリプトを選択。
(6) 挿入オプションで、「全員にこのサービスの実行を許可する」にチェックを入れて保存する。
ファイルキャビネットページをリロードすると、ファイルアップロードフォームが表示されるはずだ。これで、閲覧権限しか持たないユーザーでも、ファイルをアップロードすることができる。
Google Sitesに貼りつけたAppsスクリプトは、そのスクリプトを貼りつけたユーザーの権限で実行されるようだ。そのため、閲覧権限しか持たないユーザーでも、Appsスクリプト実行権限を持つユーザーとして、ファイルをアップロードできるということだ。
上記のソースコードはあくまでアップロードができるかどうか検証するために作ったものなので、入力チェックは無いし、装飾も施していない。実際に利用される際は、少し手を加える必要がある。
また、スクリプトを貼りつけたユーザーの権限で実行されるという特性上、アップロードしたファイルの投稿者は、すべてあなたの名前になっているはずだ。
以上の点に注意して頂きたい。
このエントリーのトラックバックURL:
http://www.bmoo.net/archives/2012/02/312930.html/trackback
[…] Apps Scriptで実現できるのではないだろうか。(2012/2/29追記:実現できました)記憶によると、サイトに埋め込ませたApps […]
はじめまして。google site を最近触り始めたばかりの者です。
こちらの記事を参考に試行錯誤してみたのですが
どうにも上手くいかず、コメントさせていただきました。
> Google Sitesに設置する手順
に則って、ソースコードをコピペしたAppsスクリプトをキャビネットページに挿入。
作成されたフォームで実際にアップロードしようとすると、
なぜか0バイトの userAppPost なるファイルがダウンロードされます。
・ファイルキャビネット自体は正常に動作しています
・ログイン状態、ログアウト状態、両方で試しましたがどちらもダメでした
・ファイルを何も選択していない状態で「Upload」を押しても同様の症状でした
特別何か手を加えたりはしていないはずなので
逆に何か設定が足りないのでしょうか?
間抜けな質問で申し訳ありません。お暇なときにでもご教示くだされば幸いです。
よろしくお願いします。
コンノさん、コメントありがとうございます。
ひょっとすると、記事のソースコードに誤りがあるのかもしれません。
今はちょっと検証できませんので、申し訳ありませんが、少しお時間を下さい。
検証できましたら、またこちらのコメント欄で回答します。
コンノさん
返信が遅くなりまして大変申し訳ありません。
こちらで検証してみましたが、正常に動作しているようです…。
userAppPostがダウンロードされる、というのは、実行時例外が発生した場合に起こる現象ですので、今回のケースでいうと、doPostメソッドで何らかのエラーが発生しているのだと思われます。
doPostを以下のように変更して頂き、どのようなログが出力されているか教えて頂けますでしょうか?
[…] (GoogleDriveへのファイルアップ)http://www.bmoo.net/archives/2012/02/312930.html […]