Class: Permission

Inherits:
ApplicationRecord
  • Object
show all
Includes:
Ransackable
Defined in:
lib/generators/ruby_cms/templates/models/permission.rb

Constant Summary collapse

DEFAULT_KEYS =
RubyCms::DEFAULT_PERMISSION_KEYS

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.all_keysObject



36
37
38
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 36

def all_keys
  (DEFAULT_KEYS + RubyCms.extra_permission_keys.map(&:to_s)).uniq.freeze
end

.apply_template!(user, template_name) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
60
61
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 52

def apply_template!(user, template_name)
  tmpl = templates[template_name.to_sym]
  raise ArgumentError, "Unknown template: #{template_name}" unless tmpl

  ensure_defaults!
  perms = where(key: tmpl[:keys])
  perms.each do |perm|
    UserPermission.find_or_create_by!(user: user, permission: perm)
  end
end

.ensure_defaults!Object



30
31
32
33
34
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 30

def ensure_defaults!
  all_keys.each do |k|
    find_or_create_by!(key: k) { |p| p.name = k.titleize }
  end
end

.matching_templates(user) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 63

def matching_templates(user)
  user_keys = UserPermission.where(user:)
                            .joins(:permission)
                            .pluck("permissions.key")
  templates.select { |_, tmpl| (tmpl[:keys] - user_keys).empty? }
           .keys
end

.register_keys(*keys) ⇒ Object



44
45
46
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 44

def register_keys(*keys)
  RubyCms.register_permission_keys(*keys)
end

.register_template(name, label:, keys:, description: nil) ⇒ Object



48
49
50
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 48

def register_template(name, label:, keys:, description: nil)
  RubyCms.register_permission_template(name, label:, keys:, description:)
end

.templatesObject



40
41
42
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 40

def templates
  RubyCms.permission_templates
end

Instance Method Details

#prevent_builtin_deletionObject

Built-in permission keys are part of the gem's contract (manage_admin etc.); deleting their row would silently strip the permission from every user.



22
23
24
25
26
27
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 22

def prevent_builtin_deletion
  return unless DEFAULT_KEYS.map(&:to_s).include?(key.to_s)

  errors.add(:base, "Kan een ingebouwde permissie (#{key}) niet verwijderen.")
  throw :abort
end