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
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
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
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_name ⇒ Object
71
72
73
|
# File 'lib/rolify/role.rb', line 71
def roles_name
self.roles.select(:name).map { |r| r.name }
end
|