Всем привет,
Я пытаюсь разобраться с этим методом в Plugin::Instance: discourse/lib/plugin/instance.rb at 06c60b017c86ddab489fd3d30c951c10b5c4d281 · ayampenyetan/discourse · GitHub
Я попытался найти существующие использования этого метода в кодовой базе Discourse и на GitHub, но, похоже, он нигде не используется за пределами тестовых случаев (по крайней мере, в общедоступном коде).
Может кто-нибудь объяснить мне следующие моменты:
- Как правильно получить экземпляр
Plugin::Instanceв плагине, чтобы можно было вызвать этот метод? - В какое правильное время следует вызывать метод, на который приведена ссылка выше? Если я создаю новый эндпоинт в своем плагине, должен ли я размещать этот вызов после создания эндпоинта? Должен ли он быть до или внутри
after_initialize? - Следующий код, похоже, регистрирует область доступа (scope), но при попытке обратиться к зарегистрированному мной эндпоинту с использованием ключа API администратора, имеющего эту область доступа, действие не находится. Эндпоинт работает нормально, если обращаться к нему с ключом API администратора, имеющим все области доступа. Почему это не работает, что я делаю неправильно?
- Я попытался добавить запись
urlsв раздел действий, но, похоже, она не учитывается. Как правильно добавить список URL-адресов, к которым применяется область доступа, к этой структуре?
after_initialize do
module ::ApiKeyScopeTest
class Engine < ::Rails::Engine
engine_name "api_key_scope_test"
isolate_namespace ApiKeyScopeTest
end
end
class ApiKeyScopeTest::ApiKeyScopeTestController < ::ApplicationController
def action
...
end
end
ApiKeyScopeTest::Engine.routes.draw do
post "/admin/plugins/api-key-scope-test" => "api_key_scope_test#action", constraints: AdminConstraint.new
end
Discourse::Application.routes.append do
mount ::ApiKeyScopeTest::Engine, at: "/"
end
plugin = Plugin::Instance.new # Примечание: неясно, верно ли это
plugin.add_api_key_scope(
:test_scope,
{
post: {
actions: %w[api_key_scope_test#action]
}
}
)
end