質問: 現在、ブログのようなシステムを開発しています。 開発環境とデータベース構成は以下の通りです。 **開発環境** * Ruby: 2.2.0 * Rails: 4.2.6 * Nginx: 1.13.5 * CentOS: 6.9 **データベース構成** ``` users - id:integer - email:string - password:string posts - id:integer - author_id:integer - title:string - content:text - thumbnail:string - status:integer ``` また、画像アップロードにはcarrierwaveのGemを使用しており、 画像の保存先は `/public/uploads/images/` 以下に設定しています。 聞きたいこと ------- 画像投稿のステータス(status)には公開を示す `:published` と下書きを示す `:draft` があります。 ステータスを `:published` にしない限り、投稿者以外は記事を表示することはできません。 しかし、画像(thumbnail)は下書き状態にしても、 直接画像のURLにアクセスすると投稿者以外も閲覧できてしまいます。 画像に複雑なファイル名を付与しようと考えましたが、それでも完全に閲覧できない保証はありません。 ステータスによって画像権限を `chmod` で変更したり、Nginxで制御したりするのでしょうか? 何か方法をご教示いただけると幸いです。よろしくお願いいたします。
回答: いくつか方法が考えられます。 * 画像の保存先をドキュメントルート外、あるいはデータベースにしておいて、画像へのアクセスもRails経由として、コントローラーが画像データを返すようにする * 画像はAWS S3のプライベートバケットに入れておいて、正しくアクセスできる権限を確認したら署名付きURLで一時公開する なお、Webサーバは基本的に1つのUnixユーザーで動きますので、`chmod`しても「Webサイト上の」ユーザーに関する切り分けには役に立ちません。