module Rolify::Role
Public Class Methods
included(base)
click to toggle source
# File lib/rolify/role.rb, line 8 def self.included(base) base.extend Finders end
Public Instance Methods
add_role(role_name, resource = nil)
click to toggle source
# 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
Also aliased as: grant
has_all_roles?(*args)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# 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
only_has_role?(role_name, resource = nil)
click to toggle source
# 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)
click to toggle source
# 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
Also aliased as: revoke
respond_to?(method, include_private = false)
click to toggle source
Calls superclass method
# 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()
click to toggle source
# File lib/rolify/role.rb, line 88 def roles_name self.roles.pluck(:name) end