From 9b8e84944c969010881487872e6437772502daa3 Mon Sep 17 00:00:00 2001 From: Ryan Bates Date: Tue, 21 Dec 2010 11:38:27 -0800 Subject: [PATCH] adding ability generator - closes #170 --- lib/generators/cancan/ability/USAGE | 4 +++ .../cancan/ability/ability_generator.rb | 11 ++++++++ .../cancan/ability/templates/ability.rb | 28 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 lib/generators/cancan/ability/USAGE create mode 100644 lib/generators/cancan/ability/ability_generator.rb create mode 100644 lib/generators/cancan/ability/templates/ability.rb diff --git a/lib/generators/cancan/ability/USAGE b/lib/generators/cancan/ability/USAGE new file mode 100644 index 0000000..9719e39 --- /dev/null +++ b/lib/generators/cancan/ability/USAGE @@ -0,0 +1,4 @@ +Description: + The cancan:ability generator creates an Ability class in the models + directory. You can move this file anywhere you want as long as it + is in the load path. diff --git a/lib/generators/cancan/ability/ability_generator.rb b/lib/generators/cancan/ability/ability_generator.rb new file mode 100644 index 0000000..6c7ad24 --- /dev/null +++ b/lib/generators/cancan/ability/ability_generator.rb @@ -0,0 +1,11 @@ +module Cancan + module Generators + class AbilityGenerator < Rails::Generators::Base + source_root File.expand_path('../templates', __FILE__) + + def generate_ability + copy_file "ability.rb", "app/models/ability.rb" + end + end + end +end diff --git a/lib/generators/cancan/ability/templates/ability.rb b/lib/generators/cancan/ability/templates/ability.rb new file mode 100644 index 0000000..58929d7 --- /dev/null +++ b/lib/generators/cancan/ability/templates/ability.rb @@ -0,0 +1,28 @@ +class Ability + include CanCan::Ability + + def initialize(user) + # Define abilities for the passed in user here. For example: + # + # user ||= User.new # guest user (not logged in) + # if user.admin? + # can :manage, :all + # else + # can :read, :all + # end + # + # The first argument to `can` is the action you are giving the user permission to do. + # If you pass :manage it will apply to every action. Other common actions here are + # :read, :create, :update and :destroy. + # + # The second argument is the resource the user can perform the action on. If you pass + # :all it will apply to every resource. Otherwise pass a Ruby class of the resource. + # + # The third argument is an optional hash of conditions to further filter the objects. + # For example, here the user can only update published articles. + # + # can :update, Article, :published => true + # + # See the wiki for details: https://github.com/ryanb/cancan/wiki/Defining-Abilities + end +end