Module: Rabarber::HasRoles

Extended by:
ActiveSupport::Concern
Defined in:
lib/rabarber/models/concerns/has_roles.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.roleable_classObject



56
57
58
# File 'lib/rabarber/models/concerns/has_roles.rb', line 56

def roleable_class
  @@included.constantize
end

Instance Method Details

#assign_roles(*role_names, create_new: true) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rabarber/models/concerns/has_roles.rb', line 25

def assign_roles(*role_names, create_new: true)
  processed_role_names = process_role_names(role_names)

  create_new_roles(processed_role_names) if create_new

  roles_to_assign = Rabarber::Role.where(name: processed_role_names - rabarber_roles.names)

  if roles_to_assign.any?
    delete_roleable_cache
    rabarber_roles << roles_to_assign

    Rabarber::Audit::Events::RolesAssigned.trigger(self, roles_to_assign: roles_to_assign.names, current_roles: roles)
  end

  roles
end

#has_role?(*role_names) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/rabarber/models/concerns/has_roles.rb', line 21

def has_role?(*role_names)
  roles.intersection(process_role_names(role_names)).any?
end

#revoke_roles(*role_names) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rabarber/models/concerns/has_roles.rb', line 42

def revoke_roles(*role_names)
  processed_role_names = process_role_names(role_names)
  roles_to_revoke = Rabarber::Role.where(name: processed_role_names.intersection(roles))

  if roles_to_revoke.any?
    delete_roleable_cache
    self.rabarber_roles -= roles_to_revoke

    Rabarber::Audit::Events::RolesRevoked.trigger(self, roles_to_revoke: roles_to_revoke.names, current_roles: roles)
  end

  roles
end

#rolesObject



17
18
19
# File 'lib/rabarber/models/concerns/has_roles.rb', line 17

def roles
  Rabarber::Core::Cache.fetch(roleable_id) { rabarber_roles.names }
end