OSDN Git Service

fix:retrive
[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_seeeions/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: (reader, resource_reader, user, author, artist) ->\r
47     author_filter = if _.isFunction(author)\r
48       author()\r
49     else\r
50       _.union(@default_author_filters, author)\r
51     artist_filter = if _.isFunction(artist)\r
52       artist()\r
53     else\r
54       _.union(@default_artist_filters, artist)\r
55     {\r
56       reader: _.union(@default_reader_filters, reader),\r
57       resource_reader: _.union(@default_resource_reader_filters, resource_reader),\r
58       user: _.union(@default_user_filters, user),\r
59       author: author_filter,\r
60       artist: artist_filter\r
61     }\r
62   \r
63   @default_reader_filters = ['index', 'show']\r
64   @default_resource_reader_filters = []\r
65   @default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
66   @default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
67   @default_artist_filters = []\r
68   \r
69   @sns_filters: () ->\r
70     {\r
71       folders: @suply_default(\r
72         ['root', 'watch'], \r
73         [], \r
74         [], \r
75         [], \r
76         []\r
77       ),\r
78       scrolls: @suply_default(\r
79         ['play', 'by_panel', 'by_author'], \r
80         [], \r
81         [], \r
82         [], \r
83         []\r
84       ),\r
85       scroll_panels: @suply_default(\r
86         ['by_panel', 'by_scroll', 'by_author'], \r
87         [], \r
88         [], \r
89         [], \r
90         []\r
91       ),\r
92       comics: @suply_default(\r
93         ['play', 'by_story', 'by_author'], \r
94         [], \r
95         [], \r
96         [], \r
97         []\r
98       ),\r
99       comic_stories: @suply_default(\r
100         ['by_story', 'by_comic', 'by_author'], \r
101         [], \r
102         [], \r
103         [], \r
104         []\r
105       ),\r
106       stories: @suply_default(\r
107         ['play', 'by_comic', 'by_sheet', 'by_author'], \r
108         [], \r
109         [], \r
110         [], \r
111         []\r
112       ),\r
113       story_sheets: @suply_default(\r
114         ['by_story', 'by_sheet', 'by_author'], \r
115         [], \r
116         [], \r
117         [], \r
118         []\r
119       ),\r
120       sheets: @suply_default(\r
121         ['play', 'by_story', 'by_panel', 'by_author'], \r
122         [], \r
123         [], \r
124         [], \r
125         []\r
126       ),\r
127       sheet_panels: @suply_default(\r
128         ['by_panel', 'by_sheet', 'by_author'], \r
129         [], \r
130         [], \r
131         [], \r
132         []\r
133       ),\r
134       panels: @suply_default(\r
135         ['by_scroll', 'by_sheet', 'by_author', 'by_speech_balloon_template'], \r
136         [], \r
137         [], \r
138         [], \r
139         []\r
140       ),\r
141       panel_pictures: @suply_default(\r
142         ['by_panel', 'by_author'], \r
143         [], \r
144         [], \r
145         [], \r
146         []\r
147       ),\r
148       speech_balloons: @suply_default(\r
149         ['by_panel', 'by_author', 'by_speech_balloon_template'], \r
150         [], \r
151         [], \r
152         [], \r
153         []\r
154       ),\r
155       speeches: @suply_default(\r
156         ['by_author', 'by_speech_balloon', 'by_speech_balloon_template', 'by_writing_format'], \r
157         [], \r
158         [], \r
159         [], \r
160         []\r
161       ),\r
162       balloons: @suply_default(\r
163         [], \r
164         [], \r
165         [], \r
166         [], \r
167         []\r
168       ),\r
169       ground_pictures: @suply_default(\r
170         ['by_panel', 'by_author'], \r
171         [], \r
172         [], \r
173         [], \r
174         []\r
175       ),\r
176       ground_colors: @suply_default(\r
177         ['by_panel', 'by_author'], \r
178         [], \r
179         [], \r
180         [], \r
181         []\r
182       ),\r
183       original_pictures: @suply_default(\r
184         ['history'], \r
185         [], \r
186         [], \r
187         [], \r
188         ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
189       ),\r
190       pictures: @suply_default(\r
191         ['credit', 'search'], \r
192         [], \r
193         [], \r
194         [], \r
195         []\r
196       ),\r
197       resource_pictures: @suply_default(\r
198         ['credit', 'by_original_picture', 'by_license_group', 'by_license', 'by_artist'], \r
199         [], \r
200         [], \r
201         [], \r
202         ['new', 'create', 'edit', 'update', 'destroy']\r
203       ),\r
204       speech_balloon_templates: @suply_default(\r
205         ['by_panel', 'by_system_picture'], \r
206         [], \r
207         [], \r
208         [], \r
209         []\r
210       ),\r
211       writing_formats: @suply_default(\r
212         ['by_system_picture'], \r
213         [], \r
214         [], \r
215         [], \r
216         []\r
217       ),\r
218       license_groups: @suply_default(\r
219         ['by_resource_picture'], \r
220         [], \r
221         [], \r
222         [], \r
223         []\r
224       ),\r
225       licenses: @suply_default(\r
226         ['by_license_group', 'by_system_picture'], \r
227         [], \r
228         [], \r
229         [], \r
230         []\r
231       ),\r
232       authors: @suply_default(\r
233         [], \r
234         [], \r
235         [], \r
236         () ->\r
237           ['edit', 'update', 'destroy']\r
238         , \r
239         []\r
240       ),\r
241       artists: @suply_default(\r
242         [], \r
243         [], \r
244         [], \r
245         [], \r
246         () ->\r
247           ['edit', 'update', 'destroy']\r
248       ),\r
249       system_pictures: @suply_default(\r
250         [], \r
251         [], \r
252         [], \r
253         [], \r
254         []\r
255       ),\r
256       home: @suply_default(\r
257         [\r
258           'profile', 'configure', 'create_token', 'delete_token', \r
259           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
260           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
261         ], \r
262         [\r
263           'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
264           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
265         ], \r
266         [], \r
267         [], \r
268         []\r
269       ),\r
270     }\r
271   \r
272   @blog_filters: () ->\r
273     default_reader_filters = []\r
274     default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
275     default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
276     {\r
277       'folders': {\r
278         reader: _.union(default_reader_filters, []),\r
279         resource_reader: _.union(default_resource_reader_filters, []),\r
280         user: _.union(default_user_filters, []),\r
281         author: _.union(default_author_filters, [])\r
282       },\r
283       'scrolls': {\r
284         user: _.union(default_user_filters, []),\r
285         author: _.union(default_author_filters, [])\r
286       },\r
287     }\r
288   \r