質問編集履歴

2

c\.その他のダウンロード方法について追記

2017/07/24 11:42

投稿

h_daido
h_daido

スコア824

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  c.その他(officeドキュメントなど)
34
34
 
35
- -> railsのコントローラーを経由してダウンロードさせています。
35
+ -> railsのコントローラーを経由してダウンロードさせています。その際には上記can_show_file?で権限チェックしています。
36
36
 
37
37
 
38
38
 

1

UUIDについて追記しました

2017/07/24 11:42

投稿

h_daido
h_daido

スコア824

test CHANGED
@@ -1 +1 @@
1
- Rails + CarrierWave + S3(fog)でユーザー毎の権限制御ベストプラクティスは?
1
+ Rails + CarrierWave + S3(fog)でユーザー毎にセキュアなファイルアクセス与え方法は?
test CHANGED
@@ -1,16 +1,66 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- 上記の構成で、ログインしているユーザー毎に画像の参照権限を振り分けたいです。
3
+ 表題の構成で、ログインしているユーザー毎にファイルの参照権限を振り分けたいです。
4
4
 
5
- メージ的にはユーザーはグープ所属しおり同じグープユーザー所属る画像のみ閲覧可能のような事をしたい)
5
+ ログユーザーが対象のファイを閲覧かどうかの判定ついuserモデに判定用メソッドあり(仮にcan_show_file?としま)、そちらで判断がつきます
6
6
 
7
7
 
8
8
 
9
- インユーザーが対象の画像閲覧かどうかの判定については、deviseとcancanで可能なのでが、
9
+ (具体的にはユーザーはループに所属しており、同じグループのユーザーが投稿した画像閲覧可能っていま
10
10
 
11
- S3のurlを総当たりすれば見れてしまうでしょうし、
12
11
 
12
+
13
+ この構成でセキュアかつパフォーマンス良くアクセス権限を振るにはどうしたらよいのか?が教えていただきたい内容になります。
14
+
15
+
16
+
17
+ 主にファイルは3タイプを考えていて、
18
+
19
+
20
+
21
+ a.画像
22
+
23
+ -> 直接s3のファイルURLをimgタグにセットして表示しています。attachment(モデル名).file_url等でcarrier_wave越しに取得できる値です。
24
+
25
+
26
+
27
+ b.pdf
28
+
29
+ -> ブラウザ別タブ開いてプレビューさせています。渡しているURLはa.画像同様にs3のurl。
30
+
31
+
32
+
33
+ c.その他(officeドキュメントなど)
34
+
35
+ -> railsのコントローラーを経由してダウンロードさせています。
36
+
37
+
38
+
39
+ 全てc.のようにコントローラーを経由しようかとも考えたのですが、特に画像のパフォーマンスがやばくなりそうなで辞めました。
40
+
41
+
42
+
43
+
44
+
45
+ 一応、[こちらのドキュメント](https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Create-random-and-unique-filenames-for-all-versioned-files)にしたがって、ファイル名にUUIDを付与しているのですが、総当たりすることで閲覧できてしまうような...。
46
+
47
+ そんな天文学的な確率は考慮しなくて良いのでしょうか?
48
+
49
+
50
+
51
+ ※ また、下記設定を施して、アクセス後60秒間のみ同URLでアクセス可能にしています
52
+
53
+ ```ruby
54
+
55
+ CarrierWave.configure do |config|
56
+
57
+ config.fog_public = false
58
+
13
- CarrierWaveのfog_public:falseとfog_authenticated_url_expirationを使っても、(一定時間の間だけですが)取得することが可能になってしまうのではと危惧しています...。
59
+ config.fog_authenticated_url_expiration = 60
60
+
61
+ end
62
+
63
+ ```
14
64
 
15
65
 
16
66