Лучшие практики автоматизации заголовков по комбинациям групп и уровней доверия

Привет!

Я модифицировал плагин под свои нужды и хотел бы поделиться тем, что я сделал, своим текущим рабочим процессом, а также задать несколько вопросов и запросить совет.


1. Мои изменения

Путь к файлу и содержимое:

Файл: app/jobs/scheduled/update-all-titles.rb

# frozen_string_literal: true

module AddTitleBasedOnTrustLevel
  class UpdateTitles < ::Jobs::Scheduled
    every SiteSetting.update_title_frequency.hours

    def execute(args)
      group_titles = JSON.parse(SiteSetting.group_trust_level_titles || "{}")

      User.find_each do |user|
        # Пропускаем администраторов и модераторов, не обновляем их титулы
        next if user.admin? || user.moderator?

        group_id = user.primary_group_id
        next unless group_id

        group = Group.find_by(id: group_id)
        next unless group

        group_key = group.name.downcase
        tl = user.trust_level

        titles = group_titles[group_key]
        next unless titles.is_a?(Array)
        next unless tl >= 1 && tl <= 4

        new_title = titles[tl]
        next unless new_title.present?

        user.update_column(:title, new_title) if user.title != new_title
      end
    end
  end
end

Файл: config/settings.yml

plugins:
  add_title_based_on_trust_level_enabled:
    default: false
    client: true
  group_trust_level_titles:
    default: '{"designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"], "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]}'
    type: string
    client: true
    multiline: true
  update_title_frequency:
    default: 24
    type: integer

2. Как я тестировал

В настоящее время я запускаю эту логику вручную через rails console, чтобы проверить, работает ли функция. Она действительно обновляет титулы пользователей массово в соответствии с моими требованиями.


3. Проблема с кнопкой настроек плагина

На странице /admin/plugins для этого плагина нет кнопки «Настройки». В данный момент, чтобы изменить конфигурацию, мне приходится переходить напрямую по адресу /admin/plugins/add-title-based-on-trust-level/settings.
Есть ли способ сделать так, чтобы кнопка или ссылка настроек отображалась на странице Плагины для более удобного доступа?


4. Мои текущие настройки

Вот моя текущая JSON-конфигурация (я также приложу скриншот):

{
  "designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"],
  "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]
}


5. Вопросы / Возможные улучшения

  • Несет ли этот подход (перебор всех пользователей и обновление их титулов) риск проблем с производительностью, если пользователей очень много? Есть ли лучшая практика для этого?
  • Любые советы по оптимизации, как для запланированной задачи, так и для интерфейса настроек администратора?
  • Есть ли что-то небезопасное или проблемное в моем методе, о чем мне следует знать?

Большое спасибо за вашу отличную работу и этот полезный плагин!
Если у вас есть какие-либо предложения или если вы планируете улучшить конфигурацию титулов на основе группы и уровня доверия в будущем, я с радостью выслушаю ваши мысли.