Module: Rabarber::Roleable

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

Instance Method Summary collapse

Instance Method Details

#all_rolesObject



46
47
48
# File 'lib/rabarber/models/concerns/roleable.rb', line 46

def all_roles
  Rabarber::Core::Cache.fetch([roleable_id, :all]) { rabarber_roles.all_names }
end

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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rabarber/models/concerns/roleable.rb', line 56

def assign_roles(*role_names, context: nil, create_new: true)
  processed_role_names = process_role_names(role_names)
  processed_context = process_context(context)

  create_new_roles(processed_role_names, context: processed_context) if create_new

  roles_to_assign = Rabarber::Role.where(
    name: (processed_role_names - rabarber_roles.names(context: processed_context)), **processed_context
  )

  if roles_to_assign.any?
    delete_roleable_cache(contexts: [processed_context])
    rabarber_roles << roles_to_assign
  end

  roles(context: processed_context)
end

#has_role?(*role_names, context: nil) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
53
54
# File 'lib/rabarber/models/concerns/roleable.rb', line 50

def has_role?(*role_names, context: nil)
  processed_context = process_context(context)
  processed_roles = process_role_names(role_names)
  roles(context: processed_context).any? { |role_name| processed_roles.include?(role_name) }
end

#revoke_all_rolesObject



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/rabarber/models/concerns/roleable.rb', line 90

def revoke_all_roles
  return [] if rabarber_roles.none?

  contexts = all_roles.keys.map { process_context(_1) }

  rabarber_roles.clear

  delete_roleable_cache(contexts:)

  []
end

#revoke_roles(*role_names, context: nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/rabarber/models/concerns/roleable.rb', line 74

def revoke_roles(*role_names, context: nil)
  processed_role_names = process_role_names(role_names)
  processed_context = process_context(context)

  roles_to_revoke = Rabarber::Role.where(
    name: processed_role_names.intersection(rabarber_roles.names(context: processed_context)), **processed_context
  )

  if roles_to_revoke.any?
    delete_roleable_cache(contexts: [processed_context])
    self.rabarber_roles -= roles_to_revoke
  end

  roles(context: processed_context)
end

#roles(context: nil) ⇒ Object



41
42
43
44
# File 'lib/rabarber/models/concerns/roleable.rb', line 41

def roles(context: nil)
  processed_context = process_context(context)
  Rabarber::Core::Cache.fetch([roleable_id, processed_context]) { rabarber_roles.names(context: processed_context) }
end