Pergunta

Estou tentando construir um módulo de livro de visitas em um site Rails usando a estrutura Alchemy CMS.Não parece haver muita documentação para construção de módulos com Alchemy, então estou apenas saindo esta página.

Eu criei dois controladores, um que os administradores usarão, chamado guestbook_controller.rb, e coloquei-o em app/controllers/admin

module Admin
  class GuestbookController < Alchemy::Admin::ResourcesController
    def index
      "index"
    end
  end
end

e outro para acesso dos convidados em app/controllers/guestbook_controller.rb

class GuestbookController < ActionController::Base
  def index
    "index"
  end
end

Minha intenção é que as postagens do livro de visitas sejam exibidas em uma das páginas já dentro do Alchemy e um formulário também seja exibido nesta página.

O modelo do livro de visitas é assim:

class GuestbookEntry < ActiveRecord::Base
  attr_accessible :location, :message, :name
end

Meu arquivo de rotas se parece com o seguinte:

resources :guestbook

namespace :admin do
  resources :guestbook
end

mount Alchemy::Engine => '/'

e eu tenho um arquivo chamadoauthorization_rules.rb na configuração que se parece com:autorização fazer

  role :admin do
    has_permission_on :guestbook, :to => [:manage]
  end

end

O primeiro problema que encontro é que ir para a rota /admin/guestbook me dá o erro 'Você não está autorizado', mas o arquivo de regras de autorização deveria estar sendo chamado pelo meu inicializador, então por que estou recebendo esse erro?

# 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'))
Foi útil?

Solução

O problema com a autorização é fácil.Você só precisa escrever:

has_permission_on :admin_guestbook, :to => [:manage]

Outra coisa que notei:Seu frontend GuestbookController deve herdar de Alchemy::BaseController.

E você deve se certificar de que a página na qual deseja renderizar as entradas do livro de visitas não deve ser armazenada em cache pelo Alchemy.Você pode fazer isso usando cache: false opção no page_layouts.yml para o layout da sua página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top