OSDN Git Service

fix: editor canceler for picker
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / action_filter.js.coffee
index 141fcb2..23b3c0f 100644 (file)
 class Pettanr.ActionFilter\r
   \r
-  @suply_default: (reader, resource_reader, user, author) ->\r
+  # access block\r
+  # return sign in form if invalid url\r
+  # return null if url is valid\r
+  @test: (params, operators) ->\r
+    return @guest_url() if @is_deny('reader', params, operators) or @is_deny('resource_reader', params, operators) or @is_deny('user', params, operators)\r
+    return @new_author_url() if @is_deny('author', params, operators)\r
+    return @new_artist_url() if @is_deny('artist', params, operators)\r
+    null\r
+  \r
+  @filters: () ->\r
+    if Pettanr.is_sns()\r
+      @sns_filters()\r
+    else\r
+      @blog_filters()\r
+  \r
+  @my_filters: (role, params) ->\r
+    f = @filters()\r
+    c = f[params['controller']] || {}\r
+    r = c[role]\r
+    r\r
+  \r
+  @before_filter: (action_name, filter_action_names) ->\r
+    _.contains(filter_action_names, action_name)\r
+  \r
+  # return false if allow\r
+  # return true if deny\r
+  @is_deny: (role, params, operators) ->\r
+    n = 'is_' + role\r
+    if not operators[n]()  # ex: operators.is_user()\r
+      filter = @my_filters(role, params)\r
+      if @before_filter(params['action'], filter)\r
+        return true\r
+    false\r
+  \r
+  @guest_url: () ->\r
+    'user_seeeions/new'\r
+  \r
+  @new_author_url: () ->\r
+    'authors/new'\r
+  \r
+  @new_artist_url: () ->\r
+    'artists/new'\r
+  \r
+  @suply_default: (reader, resource_reader, user, author, artist) ->\r
+    author_filter = if _.isFunction(author)\r
+      author()\r
+    else\r
+      _.union(@default_author_filters, author)\r
+    artist_filter = if _.isFunction(artist)\r
+      artist()\r
+    else\r
+      _.union(@default_artist_filters, artist)\r
     {\r
       reader: _.union(@default_reader_filters, reader),\r
       resource_reader: _.union(@default_resource_reader_filters, resource_reader),\r
       user: _.union(@default_user_filters, user),\r
-      author: _.union(@default_author_filters, author)\r
+      author: author_filter,\r
+      artist: artist_filter\r
     }\r
   \r
   @default_reader_filters = ['index', 'show']\r
   @default_resource_reader_filters = []\r
   @default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
   @default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
+  @default_artist_filters = []\r
   \r
   @sns_filters: () ->\r
-    default_reader_filters = ['index', 'show']\r
-    default_resource_reader_filters = []\r
-    default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
-    default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
     {\r
       folders: @suply_default(\r
         ['root', 'watch'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       scrolls: @suply_default(\r
         ['play', 'by_panel', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       scroll_panels: @suply_default(\r
         ['by_panel', 'by_scroll', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       comics: @suply_default(\r
         ['play', 'by_story', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       comic_stories: @suply_default(\r
         ['by_story', 'by_comic', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       stories: @suply_default(\r
         ['play', 'by_comic', 'by_sheet', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       story_sheets: @suply_default(\r
         ['by_story', 'by_sheet', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       sheets: @suply_default(\r
         ['play', 'by_story', 'by_panel', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       sheet_panels: @suply_default(\r
         ['by_panel', 'by_sheet', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       panels: @suply_default(\r
         ['by_scroll', 'by_sheet', 'by_author', 'by_speech_balloon_template'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       panel_pictures: @suply_default(\r
         ['by_panel', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       speech_balloons: @suply_default(\r
         ['by_panel', 'by_author', 'by_speech_balloon_template'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       speeches: @suply_default(\r
         ['by_author', 'by_speech_balloon', 'by_speech_balloon_template', 'by_writing_format'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       balloons: @suply_default(\r
         [], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       ground_pictures: @suply_default(\r
         ['by_panel', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       ground_colors: @suply_default(\r
         ['by_panel', 'by_author'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       original_pictures: @suply_default(\r
         ['history'], \r
         [], \r
         [], \r
-        []\r
+        [], \r
+        ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
       ),\r
       pictures: @suply_default(\r
         ['credit', 'search'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       resource_pictures: @suply_default(\r
         ['credit', 'by_original_picture', 'by_license_group', 'by_license', 'by_artist'], \r
         [], \r
         [], \r
-        []\r
+        [], \r
+        ['new', 'create', 'edit', 'update', 'destroy']\r
       ),\r
       speech_balloon_templates: @suply_default(\r
         ['by_panel', 'by_system_picture'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       writing_formats: @suply_default(\r
         ['by_system_picture'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       license_groups: @suply_default(\r
         ['by_resource_picture'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       licenses: @suply_default(\r
         ['by_license_group', 'by_system_picture'], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       authors: @suply_default(\r
         [], \r
         [], \r
         [], \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
+        , \r
         []\r
       ),\r
       artists: @suply_default(\r
         [], \r
         [], \r
         [], \r
-        []\r
+        [], \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
       ),\r
       system_pictures: @suply_default(\r
         [], \r
         [], \r
         [], \r
+        [], \r
         []\r
       ),\r
       home: @suply_default(\r
@@ -186,6 +264,7 @@ class Pettanr.ActionFilter
           'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
         ], \r
         [], \r
+        [], \r
         []\r
       ),\r
     }\r