Module: Canard::UserModel

Defined in:
lib/canard/user_model.rb

Defined Under Namespace

Modules: InstanceMethods

Instance Method Summary collapse

Instance Method Details

#acts_as_user(*args) ⇒ Object

Canard applies roles to a model using the acts_as_user class method. The following User model will be given the :manager and :admin roles

class User < ActiveRecord::Base

  acts_as_user :roles => [:manager, :admin]

end

If using Canard with a non ActiveRecord class you can still assign roles but you will need to extend the class with Canard::UserModel and add a roles_mask attribute.

class User

  extend Canard::UserModel

  attr_accessor :roles_mask

  acts_as_user :roles => [:manager, :admin]

end

You can choose the attribute used for the roles_mask by specifying :roles_mask. If no roles_mask is specified it uses RoleModel’s default of ‘roles_mask’

acts_as_user :roles_mask => :my_roles_mask, :roles => [:manager, :admin]

Scopes

Beyond applying the roles to the model, acts_as_user also creates some useful scopes for ActiveRecord models;

User.with_any_role(:manager, :admin)

returns all the managers and admins

User.with_all_roles(:manager, :admin)

returns only the users with both the manager and admin roles

User.admins

returns all the admins as

User.managers

returns all the users with the maager role likewise

User.non_admins

returns all the users who don’t have the admin role and

User.non_managers

returns all the users who don’t have the manager role.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/canard/user_model.rb', line 59

def acts_as_user(*args)
  include RoleModel
  include InstanceMethods
  
  options = args.last.is_a?(Hash) ? args.pop : {}
  
  if defined?(ActiveRecord) && self < ActiveRecord::Base
    extend Adapters::ActiveRecord
  elsif defined?(Mongoid) && self.included_modules.include?(Mongoid::Document)
    extend Adapters::Mongoid
    field (options[:roles_mask] || :roles_mask), :type => Integer
  end

  roles_attribute options[:roles_mask] if options.has_key?(:roles_mask)

  roles options[:roles] if options.has_key?(:roles) && has_roles_mask_accessors?

  add_role_scopes if respond_to?(:add_role_scopes, true)
end