module Permitify::Permission

Public Instance Methods

add_role(role_name, resource = nil) click to toggle source
Calls superclass method
# File lib/permitify/permission.rb, line 14
def add_role(role_name, resource = nil)
  Permitify::Utils.validate_role(role_name)
  super
end
can?(permission, resource = nil)
Alias for: has_permission?
define_dynamic_permission_scope(method_sym, class_sym) click to toggle source
# File lib/permitify/permission.rb, line 47
def define_dynamic_permission_scope(method_sym, class_sym)
  class_eval do
    define_method(method_sym) do |permission|
      klass = class_sym.to_s.classify.constantize rescue nil

      if klass.present? && klass.respond_to?(:with_permission)
        klass.with_permission(permission, self)
      end
    end unless method_defined?(method_sym)
  end
end
has_permission?(permission, resource = nil) click to toggle source
# File lib/permitify/permission.rb, line 5
def has_permission?(permission, resource = nil)
  applicable_roles = self.role_symbols(permission).select do |r|
    self.has_role?(r, resource) || self.has_role?(r, resource.class)
  end

  Permitify::Utils.permissions_for_roles(applicable_roles).include?(permission)
end
Also aliased as: can?
method_missing(method_sym, *args, &block) click to toggle source
Calls superclass method
# File lib/permitify/permission.rb, line 23
def method_missing(method_sym, *args, &block)
  if method_sym.to_s.match(/^(\w+)_for_permission$/)
    self.class.define_dynamic_permission_scope(method_sym, $1)
    send(method_sym, args.first)
  else
    super
  end
end
role_symbols(permission) click to toggle source
# File lib/permitify/permission.rb, line 19
def role_symbols(permission)
  self.roles.pluck(:name).map(&:to_sym)
end
with_permission(permission, resource = nil) click to toggle source
# File lib/permitify/permission.rb, line 33
def with_permission(permission, resource = nil)
  role_names = Permitify::Utils.roles_for_permission(permission)
  users = []

  role_names.each do |role|
    users_to_add = self.with_role(role, resource)
    users = users_to_add if users.empty?
    users = users_to_add.or(users) unless users.empty?
  end

  return users.distinct
end
Also aliased as: with_permissions
with_permissions(permission, resource = nil)
Alias for: with_permission