OSDN Git Service

conflict
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / action_filter.js.coffee
1 class Pettanr.ActionFilter\r
2   \r
3   # access block\r
4   # return sign in form if invalid url\r
5   # return null if url is valid\r
6   @test: (params) ->\r
7     return @guest_url() if @is_deny('reader', params) or @is_deny('resource_reader', params) or @is_deny('user', params)\r
8     return @new_author_url() if @is_deny('author', params)\r
9     return @new_artist_url() if @is_deny('artist', params)\r
10     null\r
11   \r
12   @filters: () ->\r
13     if Pettanr.is_sns()\r
14       @sns_filters()\r
15     else\r
16       @blog_filters()\r
17   \r
18   @my_filters: (role, params) ->\r
19     f = @filters()\r
20     c = f[params['controller']] || {}\r
21     r = c[role]\r
22     r\r
23   \r
24   @before_filter: (action_name, filter_action_names) ->\r
25     _.contains(filter_action_names, action_name)\r
26   \r
27   # return false if allow\r
28   # return true if deny\r
29   @is_deny: (role, params) ->\r
30     n = 'is_' + role\r
31     if not Pettanr.cache.operators[n]()  # ex: operators.is_user()\r
32       filter = @my_filters(role, params)\r
33       if @before_filter(params['action'], filter)\r
34         return true\r
35     false\r
36   \r
37   @guest_url: () ->\r
38     'user_sessions/new'\r
39   \r
40   @new_author_url: () ->\r
41     'authors/new'\r
42   \r
43   @new_artist_url: () ->\r
44     'artists/new'\r
45   \r
46   @suply_default: (mode, reader, resource_reader, user, author, artist) ->\r
47     author_filter = if _.isFunction(author)\r
48       author()\r
49     else\r
50       _.union(@default_filters[mode].author, author)\r
51     artist_filter = if _.isFunction(artist)\r
52       artist()\r
53     else\r
54       _.union(@default_filters[mode].artist, artist)\r
55     {\r
56       reader: _.union(@default_filters[mode].reader, reader),\r
57       resource_reader: _.union(@default_filters[mode].resource_reader, resource_reader),\r
58       user: _.union(@default_filters[mode].user, user),\r
59       author: author_filter,\r
60       artist: artist_filter\r
61     }\r
62   \r
63   @suply_sns_default: (reader, resource_reader, user, author, artist) ->\r
64     @suply_default('sns', reader, resource_reader, user, author, artist)\r
65   \r
66   @suply_blog_default: (reader, resource_reader, user, author, artist) ->\r
67     @suply_default('blog', reader, resource_reader, user, author, artist)\r
68   \r
69   @default_filters = {\r
70     sns: {\r
71       reader: ['index', 'show']\r
72       resource_reader: []\r
73       user: ['new', 'create', 'edit', 'update', 'destroy']\r
74       author: ['new', 'create', 'edit', 'update', 'destroy']\r
75       artist: []\r
76     },\r
77     blog: {\r
78       reader: []\r
79       resource_reader: []\r
80       user: ['new', 'create', 'edit', 'update', 'destroy']\r
81       author: ['new', 'create', 'edit', 'update', 'destroy']\r
82       artist: []\r
83     }\r
84   }\r
85   \r
86   @sns_filters: () ->\r
87     {\r
88       folders: @suply_sns_default(\r
89         ['root', 'watch'], \r
90         [], \r
91         [], \r
92         [], \r
93         []\r
94       ),\r
95       scrolls: @suply_sns_default(\r
96         ['play', 'by_panel', 'by_author'], \r
97         [], \r
98         [], \r
99         [], \r
100         []\r
101       ),\r
102       scroll_panels: @suply_sns_default(\r
103         ['by_panel', 'by_scroll', 'by_author'], \r
104         [], \r
105         [], \r
106         [], \r
107         []\r
108       ),\r
109       comics: @suply_sns_default(\r
110         ['play', 'by_story', 'by_author'], \r
111         [], \r
112         [], \r
113         [], \r
114         []\r
115       ),\r
116       comic_stories: @suply_sns_default(\r
117         ['by_story', 'by_comic', 'by_author'], \r
118         [], \r
119         [], \r
120         [], \r
121         []\r
122       ),\r
123       stories: @suply_sns_default(\r
124         ['play', 'by_comic', 'by_sheet', 'by_author'], \r
125         [], \r
126         [], \r
127         [], \r
128         []\r
129       ),\r
130       story_sheets: @suply_sns_default(\r
131         ['by_story', 'by_sheet', 'by_author'], \r
132         [], \r
133         [], \r
134         [], \r
135         []\r
136       ),\r
137       sheets: @suply_sns_default(\r
138         ['play', 'by_story', 'by_panel', 'by_author'], \r
139         [], \r
140         [], \r
141         [], \r
142         []\r
143       ),\r
144       sheet_panels: @suply_sns_default(\r
145         ['by_panel', 'by_sheet', 'by_author'], \r
146         [], \r
147         [], \r
148         [], \r
149         []\r
150       ),\r
151       panels: @suply_sns_default(\r
152         ['by_scroll', 'by_sheet', 'by_author', 'by_speech_balloon_template'], \r
153         [], \r
154         [], \r
155         [], \r
156         []\r
157       ),\r
158       panel_pictures: @suply_sns_default(\r
159         ['by_panel', 'by_author'], \r
160         [], \r
161         [], \r
162         [], \r
163         []\r
164       ),\r
165       speech_balloons: @suply_sns_default(\r
166         ['by_panel', 'by_author', 'by_speech_balloon_template'], \r
167         [], \r
168         [], \r
169         [], \r
170         []\r
171       ),\r
172       speeches: @suply_sns_default(\r
173         ['by_author', 'by_speech_balloon', 'by_speech_balloon_template', 'by_writing_format'], \r
174         [], \r
175         [], \r
176         [], \r
177         []\r
178       ),\r
179       balloons: @suply_sns_default(\r
180         [], \r
181         [], \r
182         [], \r
183         [], \r
184         []\r
185       ),\r
186       ground_pictures: @suply_sns_default(\r
187         ['by_panel', 'by_author'], \r
188         [], \r
189         [], \r
190         [], \r
191         []\r
192       ),\r
193       ground_colors: @suply_sns_default(\r
194         ['by_panel', 'by_author'], \r
195         [], \r
196         [], \r
197         [], \r
198         []\r
199       ),\r
200       original_pictures: @suply_sns_default(\r
201         ['history'], \r
202         [], \r
203         [], \r
204         () ->\r
205           []\r
206         , \r
207         ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
208       ),\r
209       pictures: @suply_sns_default(\r
210         ['credit', 'search'], \r
211         [], \r
212         [], \r
213         [], \r
214         []\r
215       ),\r
216       resource_pictures: @suply_sns_default(\r
217         ['credit', 'by_original_picture', 'by_license_group', 'by_license', 'by_artist'], \r
218         [], \r
219         [], \r
220         [], \r
221         ['new', 'create', 'edit', 'update', 'destroy']\r
222       ),\r
223       speech_balloon_templates: @suply_sns_default(\r
224         ['by_panel', 'by_system_picture'], \r
225         [], \r
226         [], \r
227         [], \r
228         []\r
229       ),\r
230       writing_formats: @suply_sns_default(\r
231         ['by_system_picture'], \r
232         [], \r
233         [], \r
234         [], \r
235         []\r
236       ),\r
237       license_groups: @suply_sns_default(\r
238         ['by_resource_picture'], \r
239         [], \r
240         [], \r
241         [], \r
242         []\r
243       ),\r
244       licenses: @suply_sns_default(\r
245         ['by_license_group', 'by_system_picture'], \r
246         [], \r
247         [], \r
248         [], \r
249         []\r
250       ),\r
251       authors: @suply_sns_default(\r
252         [], \r
253         [], \r
254         [], \r
255         () ->\r
256           ['edit', 'update', 'destroy']\r
257         , \r
258         () ->\r
259           []\r
260         , \r
261       ),\r
262       artists: @suply_sns_default(\r
263         [], \r
264         [], \r
265         [], \r
266         () ->\r
267           []\r
268         , \r
269         () ->\r
270           ['edit', 'update', 'destroy']\r
271       ),\r
272       system_pictures: @suply_sns_default(\r
273         [], \r
274         [], \r
275         [], \r
276         [], \r
277         []\r
278       ),\r
279       home: @suply_sns_default(\r
280         [\r
281           'profile', 'configure', 'create_token', 'delete_token', \r
282           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
283           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
284         ], \r
285         [\r
286           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
287           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
288         ], \r
289         [], \r
290         [], \r
291         []\r
292       ),\r
293     }\r
294   \r
295   @blog_filters: () ->\r
296     {\r
297       folders: @suply_blog_default(\r
298         [], \r
299         [], \r
300         [], \r
301         [], \r
302         []\r
303       ),\r
304       scrolls: @suply_blog_default(\r
305         [], \r
306         [], \r
307         [], \r
308         [], \r
309         []\r
310       ),\r
311       scroll_panels: @suply_blog_default(\r
312         [], \r
313         [], \r
314         [], \r
315         [], \r
316         []\r
317       ),\r
318       comics: @suply_blog_default(\r
319         [], \r
320         [], \r
321         [], \r
322         [], \r
323         []\r
324       ),\r
325       comic_stories: @suply_blog_default(\r
326         [], \r
327         [], \r
328         [], \r
329         [], \r
330         []\r
331       ),\r
332       stories: @suply_blog_default(\r
333         [], \r
334         [], \r
335         [], \r
336         [], \r
337         []\r
338       ),\r
339       story_sheets: @suply_blog_default(\r
340         [], \r
341         [], \r
342         [], \r
343         [], \r
344         []\r
345       ),\r
346       sheets: @suply_blog_default(\r
347         [], \r
348         [], \r
349         [], \r
350         [], \r
351         []\r
352       ),\r
353       sheet_panels: @suply_blog_default(\r
354         [], \r
355         [], \r
356         [], \r
357         [], \r
358         []\r
359       ),\r
360       panels: @suply_blog_default(\r
361         [], \r
362         [], \r
363         [], \r
364         [], \r
365         []\r
366       ),\r
367       panel_pictures: @suply_blog_default(\r
368         [], \r
369         [], \r
370         [], \r
371         [], \r
372         []\r
373       ),\r
374       speech_balloons: @suply_blog_default(\r
375         [], \r
376         [], \r
377         [], \r
378         [], \r
379         []\r
380       ),\r
381       speeches: @suply_blog_default(\r
382         [], \r
383         [], \r
384         [], \r
385         [], \r
386         []\r
387       ),\r
388       balloons: @suply_blog_default(\r
389         [], \r
390         [], \r
391         [], \r
392         [], \r
393         []\r
394       ),\r
395       ground_pictures: @suply_blog_default(\r
396         [], \r
397         [], \r
398         [], \r
399         [], \r
400         []\r
401       ),\r
402       ground_colors: @suply_blog_default(\r
403         [], \r
404         [], \r
405         [], \r
406         [], \r
407         []\r
408       ),\r
409       original_pictures: @suply_blog_default(\r
410         ['history'], \r
411         [], \r
412         [], \r
413         () ->\r
414           []\r
415         , \r
416         ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
417       ),\r
418       pictures: @suply_blog_default(\r
419         [], \r
420         [], \r
421         [], \r
422         [], \r
423         []\r
424       ),\r
425       resource_pictures: @suply_blog_default(\r
426         [], \r
427         [], \r
428         [], \r
429         [], \r
430         ['new', 'create', 'edit', 'update', 'destroy']\r
431       ),\r
432       speech_balloon_templates: @suply_blog_default(\r
433         [], \r
434         [], \r
435         [], \r
436         [], \r
437         []\r
438       ),\r
439       writing_formats: @suply_blog_default(\r
440         [], \r
441         [], \r
442         [], \r
443         [], \r
444         []\r
445       ),\r
446       license_groups: @suply_blog_default(\r
447         [], \r
448         [], \r
449         [], \r
450         [], \r
451         []\r
452       ),\r
453       licenses: @suply_blog_default(\r
454         [], \r
455         [], \r
456         [], \r
457         [], \r
458         []\r
459       ),\r
460       authors: @suply_blog_default(\r
461         [], \r
462         [], \r
463         [], \r
464         () ->\r
465           ['edit', 'update', 'destroy']\r
466         , \r
467         () ->\r
468           []\r
469         , \r
470       ),\r
471       artists: @suply_blog_default(\r
472         [], \r
473         [], \r
474         [], \r
475         () ->\r
476           []\r
477         , \r
478         () ->\r
479           ['edit', 'update', 'destroy']\r
480       ),\r
481       system_pictures: @suply_blog_default(\r
482         [], \r
483         [], \r
484         [], \r
485         [], \r
486         []\r
487       ),\r
488       home: @suply_blog_default(\r
489         [\r
490           'profile', 'configure', 'create_token', 'delete_token', \r
491           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
492           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
493         ], \r
494         [\r
495           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
496           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
497         ], \r
498         [], \r
499         [], \r
500         []\r
501       ),\r
502     }\r
503   \r