Creación de un módulo de libro de visitas personalizado para Alchemy CMS
-
13-12-2019 - |
Pregunta
Estoy intentando crear un módulo de libro de visitas dentro de un sitio Rails utilizando el marco Alchemy CMS.No parece haber mucha documentación para la creación de módulos con Alchemy, así que simplemente voy a empezar esta página.
Creé dos controladores, uno que usarán los administradores llamado guestbook_controller.rb y lo coloqué en app/controllers/admin.
module Admin
class GuestbookController < Alchemy::Admin::ResourcesController
def index
"index"
end
end
end
y otro para que los invitados accedan en app/controllers/guestbook_controller.rb
class GuestbookController < ActionController::Base
def index
"index"
end
end
Mi intención es que las publicaciones del Libro de visitas se muestren en una de las páginas que ya están dentro de Alchemy y también se mostrará un formulario en esta página.
El modelo del libro de visitas se ve así:
class GuestbookEntry < ActiveRecord::Base
attr_accessible :location, :message, :name
end
Mi archivo de rutas se parece al siguiente:
resources :guestbook
namespace :admin do
resources :guestbook
end
mount Alchemy::Engine => '/'
y tengo un archivo llamado Authorization_rules.rb en la configuración que se parece a:autorización hacer
role :admin do
has_permission_on :guestbook, :to => [:manage]
end
end
El primer problema que encuentro es que al ir a la ruta /admin/guestbook me aparece el error "No estás autorizado", pero mi inicializador debería llamar al archivo de reglas de autorización, entonces, ¿por qué recibo este error?
# Registering guestbook module in Alchemy CMS
Alchemy::Modules.register_module(YAML.load_file(File.join(File.dirname(__FILE__), '../..', 'config/guestbook_module.yml')))
# Loading authorization rules and register them to auth engine instance
Alchemy::AuthEngine.get_instance.load(File.join(File.dirname(__FILE__), '../..', 'config/authorization_rules.rb'))
Solución
El problema con la autorización es fácil.Sólo necesitas escribir:
has_permission_on :admin_guestbook, :to => [:manage]
Otra cosa que noté:Su GuestbookController frontal debe heredar de Alchemy::BaseController.
Y debe asegurarse de que Alchemy no almacene en caché la página en la que desea representar las entradas del libro de visitas.Puedes hacer esto usando cache: false
opción en page_layouts.yml para el diseño de su página.