Module: Rolify::Roles

Defined in:
lib/rolify/role.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



75
76
77
78
79
80
81
82
83
84
# File 'lib/rolify/role.rb', line 75

def method_missing(method, *args, &block)
  if method.to_s.match(/^is_(\w+)_of[?]$/) || method.to_s.match(/^is_(\w+)[?]$/)
    if Rolify.role_cname.where(:name => $1).count > 0
      resource = args.first
      self.class.define_dynamic_method $1, resource
      return has_role?("#{$1}", resource)
    end
  end unless !Rolify.dynamic_shortcuts
  super
end

Instance Method Details

#has_all_roles?(*args) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
56
# File 'lib/rolify/role.rb', line 53

def has_all_roles?(*args)
  conditions, values, count = sql_conditions(args, true)
  self.roles.where([ conditions.join(' OR '), *values ]).where(count.join(') AND (')).size > 0
end

#has_any_role?(*args) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
61
# File 'lib/rolify/role.rb', line 58

def has_any_role?(*args)
  conditions, values = sql_conditions(args)
  self.roles.where([ conditions.join(' OR '), *values ]).size > 0
end

#has_no_role(role_name, resource = nil) ⇒ Object Also known as: revoke



63
64
65
66
67
68
# File 'lib/rolify/role.rb', line 63

def has_no_role(role_name, resource = nil)
  role = self.roles.where(:name => role_name)
  role = role.where(:resource_type => (resource.is_a?(Class) ? resource.to_s : resource.class.name)) if resource
  role = role.where(:resource_id => resource.id) if resource && !resource.is_a?(Class)
  self.roles.delete(role) if role
end

#has_role(role_name, resource = nil) ⇒ Object Also known as: grant



37
38
39
40
41
42
43
44
45
# File 'lib/rolify/role.rb', line 37

def has_role(role_name, resource = nil)
  role = Rolify.role_cname.find_or_create_by_name_and_resource_type_and_resource_id(role_name, 
                                                                                    (resource.is_a?(Class) ? resource.to_s : resource.class.name if resource), 
                                                                                    (resource.id if resource && !resource.is_a?(Class)))
  if !roles.include?(role)
    self.class.define_dynamic_method(role_name, resource) if Rolify.dynamic_shortcuts
    self.role_ids |= [role.id]
  end
end

#has_role?(role_name, resource = nil) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
# File 'lib/rolify/role.rb', line 48

def has_role?(role_name, resource = nil)
  query, values = build_query(role_name, resource)
  self.roles.where(query, *values).size > 0
end

#roles_nameObject



71
72
73
# File 'lib/rolify/role.rb', line 71

def roles_name
  self.roles.select(:name).map { |r| r.name }
end