module Ruolo::Models::User

A mixin to include in downstream user classes that adds useful helper methods for dealing with roles and permissions.

Public Instance Methods

permission?(permission) click to toggle source

Given the name of a permission determine whether the user's role membership includes it.

@param permission [String] the name of the permission @return [Boolean] if the user has the permission or not

# File lib/ruolo/models/user.rb, line 27
def permission?(permission)
  roles.map { |role| role.permissions.map(&:name) }.flatten.uniq.include?(permission)
end
role?(role) click to toggle source

Given a role name or array of role names determine if the user has that/those roles.

@param role [String|Array<String>] role(s) to check @return [Boolean] if the user has the given role(s)

# File lib/ruolo/models/user.rb, line 36
def role?(role)
  !(roles.map(&:name) & Array(role)).empty?
end
set_roles(wanted_roles) click to toggle source

Given a set of all roles that the user should have add/remove roles as necessary.

@param wanted_roles [Array<String>] list of role names @return [void]

# File lib/ruolo/models/user.rb, line 45
def set_roles(wanted_roles)
  current_roles = roles.map(&:name)

  remove = current_roles.reject { |r| wanted_roles.include?(r) }
  add = wanted_roles.reject { |r| current_roles.include?(r) }

  Ruolo.configuration.connection.transaction do
    remove.each do |role|
      remove_role(Ruolo::Models::Role.where(name: role).first)
    end

    add.each do |role|
      add_role(Ruolo::Models::Role.where(name: role).first)
    end
  end
end