Class: RubyCms::Permission

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/ruby_cms/permission.rb

Constant Summary collapse

DEFAULT_KEYS =
RubyCms::DEFAULT_PERMISSION_KEYS

Class Method Summary collapse

Class Method Details

.all_keysObject



21
22
23
# File 'app/models/ruby_cms/permission.rb', line 21

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

.apply_template!(user, template_name) ⇒ Object

Raises:



37
38
39
40
41
42
43
44
45
46
# File 'app/models/ruby_cms/permission.rb', line 37

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|
    RubyCms::UserPermission.find_or_create_by!(user: user, permission: perm)
  end
end

.ensure_defaults!Object



15
16
17
18
19
# File 'app/models/ruby_cms/permission.rb', line 15

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



48
49
50
51
52
53
54
# File 'app/models/ruby_cms/permission.rb', line 48

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

.register_keys(*keys) ⇒ Object



29
30
31
# File 'app/models/ruby_cms/permission.rb', line 29

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

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



33
34
35
# File 'app/models/ruby_cms/permission.rb', line 33

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

.templatesObject



25
26
27
# File 'app/models/ruby_cms/permission.rb', line 25

def templates
  RubyCms.permission_templates
end