Erstellen eines benutzerdefinierten Gästebuchmoduls für Alchemy CMS
-
13-12-2019 - |
Frage
Ich versuche, mithilfe des Alchemy CMS-Frameworks ein Gästebuchmodul innerhalb einer Rails-Site zu erstellen.Es scheint nicht viel Dokumentation für die Modulerstellung mit Alchemy zu geben, also mache ich einfach Schluss diese Seite.
Ich habe zwei Controller erstellt, einen für Administratoren mit dem Namen „guestbook_controller.rb“ und diesen unter „app/controllers/admin“ abgelegt
module Admin
class GuestbookController < Alchemy::Admin::ResourcesController
def index
"index"
end
end
end
und eine weitere, auf die Gäste unter app/controllers/guestbook_controller.rb zugreifen können
class GuestbookController < ActionController::Base
def index
"index"
end
end
Meine Absicht ist, dass Gästebuchbeiträge unter einer der Seiten angezeigt werden, die bereits in Alchemy vorhanden sind, und dass auf dieser Seite auch ein Formular angezeigt wird.
Das Gästebuchmodell sieht so aus:
class GuestbookEntry < ActiveRecord::Base
attr_accessible :location, :message, :name
end
Meine Routendatei sieht wie folgt aus:
resources :guestbook
namespace :admin do
resources :guestbook
end
mount Alchemy::Engine => '/'
und ich habe eine Datei namens „authorization_rules.rb“ unter „config“, die so aussieht:Autorisierung tun
role :admin do
has_permission_on :guestbook, :to => [:manage]
end
end
Das erste Problem, auf das ich stoße, besteht darin, dass ich beim Aufrufen der Route /admin/guestbook die Fehlermeldung „Sie sind nicht autorisiert“ erhalte, die Datei mit den Autorisierungsregeln jedoch von meinem Initialisierer aufgerufen werden sollte. Warum erhalte ich also diese Fehlermeldung?
# 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'))
Lösung
Das Problem mit der Autorisierung ist einfach.Sie müssen nur schreiben:
has_permission_on :admin_guestbook, :to => [:manage]
Noch etwas ist mir aufgefallen:Ihr Frontend GuestbookController sollte von Alchemy::BaseController erben.
Und Sie sollten sicherstellen, dass Ihre Seite, auf der Sie die Gästebucheinträge rendern möchten, nicht von Alchemy zwischengespeichert werden darf.Sie können dies tun, indem Sie verwenden cache: false
Option in page_layouts.yml für Ihr Seitenlayout.