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