Class: Permission
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- Permission
- 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
- .all_keys ⇒ Object
- .apply_template!(user, template_name) ⇒ Object
- .ensure_defaults! ⇒ Object
- .matching_templates(user) ⇒ Object
- .register_keys(*keys) ⇒ Object
- .register_template(name, label:, keys:, description: nil) ⇒ Object
- .templates ⇒ Object
Instance Method Summary collapse
-
#prevent_builtin_deletion ⇒ Object
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.
Class Method Details
.all_keys ⇒ Object
36 37 38 |
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 36 def all_keys (DEFAULT_KEYS + RubyCms..map(&:to_s)).uniq.freeze end |
.apply_template!(user, template_name) ⇒ Object
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.(*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.(name, label:, keys:, description:) end |
.templates ⇒ Object
40 41 42 |
# File 'lib/generators/ruby_cms/templates/models/permission.rb', line 40 def templates RubyCms. end |
Instance Method Details
#prevent_builtin_deletion ⇒ Object
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 |