Module: Ruolo::Models::User

Defined in:
lib/ruolo/models/user.rb

Overview

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

Instance Method Summary collapse

Instance Method Details

#permission?(permission) ⇒ Boolean

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

Parameters:

  • permission (String)

    the name of the permission

Returns:

  • (Boolean)

    if the user has the permission or not



27
28
29
# 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) ⇒ Boolean

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

Parameters:

  • role (String|Array<String>)

    role(s) to check

Returns:

  • (Boolean)

    if the user has the given role(s)



36
37
38
# File 'lib/ruolo/models/user.rb', line 36

def role?(role)
  !(roles.map(&:name) & Array(role)).empty?
end

#set_roles(wanted_roles) ⇒ void

This method returns an undefined value.

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

Parameters:

  • wanted_roles (Array<String>)

    list of role names



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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