OSDN Git Service

conflict
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / action_filter.js.coffee
index 1b2cac4..70f44ab 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) ->\r
+    return @guest_url() if @is_deny('reader', params) or @is_deny('resource_reader', params) or @is_deny('user', params)\r
+    return @new_author_url() if @is_deny('author', params)\r
+    return @new_artist_url() if @is_deny('artist', params)\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) ->\r
+    n = 'is_' + role\r
+    if not Pettanr.cache.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_sessions/new'\r
+  \r
+  @new_author_url: () ->\r
+    'authors/new'\r
+  \r
+  @new_artist_url: () ->\r
+    'artists/new'\r
+  \r
+  @suply_default: (mode, reader, resource_reader, user, author, artist) ->\r
+    author_filter = if _.isFunction(author)\r
+      author()\r
+    else\r
+      _.union(@default_filters[mode].author, author)\r
+    artist_filter = if _.isFunction(artist)\r
+      artist()\r
+    else\r
+      _.union(@default_filters[mode].artist, 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
+      reader: _.union(@default_filters[mode].reader, reader),\r
+      resource_reader: _.union(@default_filters[mode].resource_reader, resource_reader),\r
+      user: _.union(@default_filters[mode].user, user),\r
+      author: author_filter,\r
+      artist: artist_filter\r
+    }\r
+  \r
+  @suply_sns_default: (reader, resource_reader, user, author, artist) ->\r
+    @suply_default('sns', reader, resource_reader, user, author, artist)\r
+  \r
+  @suply_blog_default: (reader, resource_reader, user, author, artist) ->\r
+    @suply_default('blog', reader, resource_reader, user, author, artist)\r
+  \r
+  @default_filters = {\r
+    sns: {\r
+      reader: ['index', 'show']\r
+      resource_reader: []\r
+      user: ['new', 'create', 'edit', 'update', 'destroy']\r
+      author: ['new', 'create', 'edit', 'update', 'destroy']\r
+      artist: []\r
+    },\r
+    blog: {\r
+      reader: []\r
+      resource_reader: []\r
+      user: ['new', 'create', 'edit', 'update', 'destroy']\r
+      author: ['new', 'create', 'edit', 'update', 'destroy']\r
+      artist: []\r
     }\r
+  }\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': {\r
-        reader: _.union(default_reader_filters, ['root', 'watch']),\r
-        resource_reader: _.union(default_resource_reader_filters, []),\r
-        user: _.union(default_user_filters, []),\r
-        author: _.union(default_author_filters, [])\r
-      },\r
-      'scrolls': {\r
-        reader: _.union(default_reader_filters, ['play', 'by_panel', 'by_author']),\r
-        resource_reader: _.union(default_resource_reader_filters, []),\r
-        user: _.union(default_user_filters, []),\r
-        author: _.union(default_author_filters, [])\r
-      },\r
-      scroll_panels: {\r
-        reader: _.union(default_reader_filters, ['by_panel', 'by_scroll', 'by_author']),\r
-        resource_reader: _.union(default_resource_reader_filters, []),\r
-        user: _.union(default_user_filters, []),\r
-        author: _.union(default_author_filters, [])\r
-      },\r
-      comics: {\r
-      },\r
-      comic_stories: {\r
-      },\r
-      stories: {\r
-      },\r
-      story_sheets: {\r
-      },\r
-      sheets: {\r
-      },\r
-      sheet_panels: {\r
-      },\r
-      panels: {\r
-      },\r
-      panel_pictures: {\r
-      },\r
-      speech_balloons: {\r
-      },\r
-      speeches: {\r
-      },\r
-      balloons: {\r
-      },\r
-      ground_pictures: {\r
-      },\r
-      ground_colors: {\r
-      },\r
-      original_pictures: {\r
-      },\r
-      pictures: {\r
-      },\r
-      resource_pictures: {\r
-      },\r
-      speech_balloon_templates: {\r
-      },\r
-      writing_formats: {\r
-      },\r
-      license_groups: {\r
-      },\r
-      licenses: {\r
-      },\r
-      authors: {\r
-      },\r
-      artists: {\r
-      },\r
-      system_pictures: {\r
-      },\r
-      home: {\r
-      },\r
+      folders: @suply_sns_default(\r
+        ['root', 'watch'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      scrolls: @suply_sns_default(\r
+        ['play', 'by_panel', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      scroll_panels: @suply_sns_default(\r
+        ['by_panel', 'by_scroll', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      comics: @suply_sns_default(\r
+        ['play', 'by_story', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      comic_stories: @suply_sns_default(\r
+        ['by_story', 'by_comic', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      stories: @suply_sns_default(\r
+        ['play', 'by_comic', 'by_sheet', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      story_sheets: @suply_sns_default(\r
+        ['by_story', 'by_sheet', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      sheets: @suply_sns_default(\r
+        ['play', 'by_story', 'by_panel', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      sheet_panels: @suply_sns_default(\r
+        ['by_panel', 'by_sheet', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      panels: @suply_sns_default(\r
+        ['by_scroll', 'by_sheet', 'by_author', 'by_speech_balloon_template'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      panel_pictures: @suply_sns_default(\r
+        ['by_panel', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      speech_balloons: @suply_sns_default(\r
+        ['by_panel', 'by_author', 'by_speech_balloon_template'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      speeches: @suply_sns_default(\r
+        ['by_author', 'by_speech_balloon', 'by_speech_balloon_template', 'by_writing_format'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      balloons: @suply_sns_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      ground_pictures: @suply_sns_default(\r
+        ['by_panel', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      ground_colors: @suply_sns_default(\r
+        ['by_panel', 'by_author'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      original_pictures: @suply_sns_default(\r
+        ['history'], \r
+        [], \r
+        [], \r
+        () ->\r
+          []\r
+        , \r
+        ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
+      ),\r
+      pictures: @suply_sns_default(\r
+        ['credit', 'search'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      resource_pictures: @suply_sns_default(\r
+        ['credit', 'by_original_picture', 'by_license_group', 'by_license', 'by_artist'], \r
+        [], \r
+        [], \r
+        [], \r
+        ['new', 'create', 'edit', 'update', 'destroy']\r
+      ),\r
+      speech_balloon_templates: @suply_sns_default(\r
+        ['by_panel', 'by_system_picture'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      writing_formats: @suply_sns_default(\r
+        ['by_system_picture'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      license_groups: @suply_sns_default(\r
+        ['by_resource_picture'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      licenses: @suply_sns_default(\r
+        ['by_license_group', 'by_system_picture'], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      authors: @suply_sns_default(\r
+        [], \r
+        [], \r
+        [], \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
+        , \r
+        () ->\r
+          []\r
+        , \r
+      ),\r
+      artists: @suply_sns_default(\r
+        [], \r
+        [], \r
+        [], \r
+        () ->\r
+          []\r
+        , \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
+      ),\r
+      system_pictures: @suply_sns_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      home: @suply_sns_default(\r
+        [\r
+          'profile', 'configure', 'create_token', 'delete_token', \r
+          'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
+          'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
+        ], \r
+        [\r
+          'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
+          'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
+        ], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
     }\r
   \r
   @blog_filters: () ->\r
-    default_reader_filters = []\r
-    default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
-    default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
     {\r
-      'folders': {\r
-        reader: _.union(default_reader_filters, []),\r
-        resource_reader: _.union(default_resource_reader_filters, []),\r
-        user: _.union(default_user_filters, []),\r
-        author: _.union(default_author_filters, [])\r
-      },\r
-      'scrolls': {\r
-        user: _.union(default_user_filters, []),\r
-        author: _.union(default_author_filters, [])\r
-      },\r
+      folders: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      scrolls: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      scroll_panels: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      comics: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      comic_stories: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      stories: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      story_sheets: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      sheets: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      sheet_panels: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      panels: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      panel_pictures: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      speech_balloons: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      speeches: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      balloons: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      ground_pictures: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      ground_colors: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      original_pictures: @suply_blog_default(\r
+        ['history'], \r
+        [], \r
+        [], \r
+        () ->\r
+          []\r
+        , \r
+        ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
+      ),\r
+      pictures: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      resource_pictures: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        ['new', 'create', 'edit', 'update', 'destroy']\r
+      ),\r
+      speech_balloon_templates: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      writing_formats: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      license_groups: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      licenses: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      authors: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
+        , \r
+        () ->\r
+          []\r
+        , \r
+      ),\r
+      artists: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        () ->\r
+          []\r
+        , \r
+        () ->\r
+          ['edit', 'update', 'destroy']\r
+      ),\r
+      system_pictures: @suply_blog_default(\r
+        [], \r
+        [], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
+      home: @suply_blog_default(\r
+        [\r
+          'profile', 'configure', 'create_token', 'delete_token', \r
+          'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
+          'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
+        ], \r
+        [\r
+          'scrolls', 'scroll_panels', 'comics', 'comic_stories', 'stories', 'story_sheets', 'sheets', 'sheet_panels', \r
+          'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
+        ], \r
+        [], \r
+        [], \r
+        []\r
+      ),\r
     }\r
   \r