Module: Rolify::Role
- Extended by:
- Utils
- Defined in:
- lib/rolify/role.rb
Class Method Summary
collapse
Instance Method Summary
collapse
-
#add_role(role_name, resource = nil) ⇒ Object
(also: #grant)
-
#has_all_roles?(*args) ⇒ Boolean
-
#has_any_role?(*args) ⇒ Boolean
-
#has_cached_role?(role_name, resource = nil) ⇒ Boolean
-
#has_role?(role_name, resource = nil) ⇒ Boolean
-
#has_strict_cached_role?(role_name, resource = nil) ⇒ Boolean
-
#has_strict_role?(role_name, resource) ⇒ Boolean
-
#method_missing(method, *args, &block) ⇒ Object
-
#only_has_role?(role_name, resource = nil) ⇒ Boolean
-
#remove_role(role_name, resource = nil) ⇒ Object
(also: #revoke)
-
#respond_to?(method, include_private = false) ⇒ Boolean
-
#roles_name ⇒ Object
Methods included from Utils
deprecate
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
92
93
94
95
96
97
98
99
|
# File 'lib/rolify/role.rb', line 92
def method_missing(method, *args, &block)
if method.to_s.match(/^is_(\w+)_of[?]$/) || method.to_s.match(/^is_(\w+)[?]$/)
resource = args.first
self.class.define_dynamic_method $1, resource
return has_role?("#{$1}", resource)
end if Rolify.dynamic_shortcuts
super
end
|
Class Method Details
.included(base) ⇒ Object
8
9
10
|
# File 'lib/rolify/role.rb', line 8
def self.included(base)
base.extend Finders
end
|
Instance Method Details
#add_role(role_name, resource = nil) ⇒ Object
Also known as:
grant
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/rolify/role.rb', line 12
def add_role(role_name, resource = nil)
role = self.class.adapter.find_or_create_by(role_name.to_s,
(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.class.adapter.add(self, role)
end
role
end
|
#has_all_roles?(*args) ⇒ Boolean
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/rolify/role.rb', line 56
def has_all_roles?(*args)
args.each do |arg|
if arg.is_a? Hash
return false if !self.has_role?(arg[:name], arg[:resource])
elsif arg.is_a?(String) || arg.is_a?(Symbol)
return false if !self.has_role?(arg)
else
raise ArgumentError, "Invalid argument type: only hash or string or symbol allowed"
end
end
true
end
|
#has_any_role?(*args) ⇒ Boolean
69
70
71
72
73
74
75
|
# File 'lib/rolify/role.rb', line 69
def has_any_role?(*args)
if new_record?
args.any? { |r| self.has_role?(r) }
else
self.class.adapter.where(self.roles, *args).size > 0
end
end
|
#has_cached_role?(role_name, resource = nil) ⇒ Boolean
47
48
49
50
|
# File 'lib/rolify/role.rb', line 47
def has_cached_role?(role_name, resource = nil)
return has_strict_cached_role?(role_name, resource) if self.class.strict_rolify and resource and resource != :any
self.class.adapter.find_cached(self.roles, name: role_name, resource: resource).any?
end
|
#has_role?(role_name, resource = nil) ⇒ Boolean
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/rolify/role.rb', line 25
def has_role?(role_name, resource = nil)
return has_strict_role?(role_name, resource) if self.class.strict_rolify and resource and resource != :any
if new_record?
role_array = self.roles.detect { |r|
r.name.to_s == role_name.to_s &&
(r.resource == resource ||
resource.nil? ||
(resource == :any && r.resource.present?))
}
else
role_array = self.class.adapter.where(self.roles, name: role_name, resource: resource)
end
return false if role_array.nil?
role_array != []
end
|
#has_strict_cached_role?(role_name, resource = nil) ⇒ Boolean
52
53
54
|
# File 'lib/rolify/role.rb', line 52
def has_strict_cached_role?(role_name, resource = nil)
self.class.adapter.find_cached_strict(self.roles, name: role_name, resource: resource).any?
end
|
#has_strict_role?(role_name, resource) ⇒ Boolean
43
44
45
|
# File 'lib/rolify/role.rb', line 43
def has_strict_role?(role_name, resource)
self.class.adapter.where_strict(self.roles, name: role_name, resource: resource).any?
end
|
#only_has_role?(role_name, resource = nil) ⇒ Boolean
77
78
79
|
# File 'lib/rolify/role.rb', line 77
def only_has_role?(role_name, resource = nil)
return self.has_role?(role_name,resource) && self.roles.count == 1
end
|
#remove_role(role_name, resource = nil) ⇒ Object
Also known as:
revoke
81
82
83
|
# File 'lib/rolify/role.rb', line 81
def remove_role(role_name, resource = nil)
self.class.adapter.remove(self, role_name.to_s, resource)
end
|
#respond_to?(method, include_private = false) ⇒ Boolean
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/rolify/role.rb', line 101
def respond_to?(method, include_private = false)
if Rolify.dynamic_shortcuts && (method.to_s.match(/^is_(\w+)_of[?]$/) || method.to_s.match(/^is_(\w+)[?]$/))
query = self.class.role_class.where(:name => $1)
query = self.class.adapter.exists?(query, :resource_type) if method.to_s.match(/^is_(\w+)_of[?]$/)
return true if query.count > 0
false
else
super
end
end
|
#roles_name ⇒ Object
88
89
90
|
# File 'lib/rolify/role.rb', line 88
def roles_name
self.roles.select(:name).map { |r| r.name }
end
|