Module: RubyCms::EngineAdminPermissions

Included in:
Engine
Defined in:
lib/ruby_cms/engine/admin_permissions.rb

Instance Method Summary collapse

Instance Method Details

#extract_email_from_args(args) ⇒ Object



20
21
22
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 20

def extract_email_from_args(args)
  args[:email] || ENV["email"] || ENV.fetch("EMAIL", nil)
end

#find_user_by_email(email) ⇒ Object



32
33
34
35
36
37
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 32

def find_user_by_email(email)
  user_class = Rails.application.config.ruby_cms.user_class_name
                    .constantize
  find_user_by_email_address(user_class, email) ||
    find_user_by_email_column(user_class, email)
end

#find_user_by_email_address(user_class, email) ⇒ Object



39
40
41
42
43
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 39

def find_user_by_email_address(user_class, email)
  return unless user_class.column_names.include?("email_address")

  user_class.find_by(email_address: email)
end

#find_user_by_email_column(user_class, email) ⇒ Object



45
46
47
48
49
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 45

def find_user_by_email_column(user_class, email)
  return unless user_class.column_names.include?("email")

  user_class.find_by(email:)
end

#grant_admin_permissions_to_admin_usersObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 5

def grant_admin_permissions_to_admin_users
  return unless defined?(::User) && User.column_names.include?("admin")

  permission_keys = RubyCms::Permission.all_keys
  permissions = RubyCms::Permission.where(key: permission_keys).index_by(&:key)
  User.where(admin: true).find_each do |u|
    permission_keys.each do |key|
      perm = permissions[key]
      next if perm.nil?

      RubyCms::UserPermission.find_or_create_by!(user: u, permission: perm)
    end
  end
end

#grant_manage_admin_permission(user, email) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 58

def grant_manage_admin_permission(user, email)
  RubyCms::Permission.ensure_defaults!
  RubyCms::Permission.all_keys.each do |key|
    perm = RubyCms::Permission.find_by(key:)
    next unless perm

    RubyCms::UserPermission.find_or_create_by!(user: user, permission: perm)
  end
  puts "Granted full admin permissions to #{email}" # rubocop:disable Rails/Output
end

#validate_email_present(email) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 24

def validate_email_present(email)
  return if email.present?

  warn "Usage: rails ruby_cms:grant_manage_admin " \
       "email=user@example.com"
  raise "Email is required"
end

#validate_user_found(user, email) ⇒ Object



51
52
53
54
55
56
# File 'lib/ruby_cms/engine/admin_permissions.rb', line 51

def validate_user_found(user, email)
  return if user

  warn "User not found: #{email}"
  raise "User not found: #{email}"
end