Skip to content

Instantly share code, notes, and snippets.

@jmgarnier
Created July 4, 2013 09:54
Show Gist options
  • Select an option

  • Save jmgarnier/5926412 to your computer and use it in GitHub Desktop.

Select an option

Save jmgarnier/5926412 to your computer and use it in GitHub Desktop.

Revisions

  1. Jean-Michel Garnier created this gist Jul 4, 2013.
    40 changes: 40 additions & 0 deletions cancan_adapter.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    require 'cancan'

    # Add a setting to the application to configure the ability
    ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"

    module ActiveAdmin

    class CanCanAdapter < AuthorizationAdapter

    def authorized?(action, subject = nil)
    cancan_ability.can?(action, subject)
    end

    def cancan_ability
    @cancan_ability ||= initialize_cancan_ability
    end

    def scope_collection(collection, action = ActiveAdmin::Auth::READ)
    collection.accessible_by(cancan_ability, action)
    end

    private

    # The setting allows the class to be stored as a string
    # to enable reloading in development.
    def initialize_cancan_ability
    ability_class_name = resource.namespace.cancan_ability_class

    if ability_class_name.is_a?(String)
    ability_class = ActiveSupport::Dependencies.constantize(ability_class_name)
    else
    ability_class = ability_class_name
    end

    ability_class.new(user)
    end

    end

    end