在Rails中,如何在管理部分中有/ admin部分,然后是控制器?

Bla*_*man 17 ruby-on-rails

我想在我的应用程序中有一个/ admin部分,并在此/ admin部分中有路由,如:

www.example.com/admin/(仅某些用户可以访问此部分)

然后在本节中有控制器,如:

/admin/users/{add, new, etc}
Run Code Online (Sandbox Code Playgroud)

对于这样的事情我有什么选择?(使用导轨3)

ste*_*dox 41

我喜欢做类似托德的回答,但略有不同.而不是将before_filter添加到与Admin内容相关的每个控制器,我更喜欢创建一个AdminController,所有与管理操作相关的控制器都可以继承:

# config/routes.rb
namespace :admin do
  resources :users
end

# app/controllers/admin_controller.rb
class AdminController < ApplicationController
  before_filter :authorized?
  private
  def authorized?
    unless current_user.has_role? :admin
      flash[:error] = "You are not authorized to view that page."
      redirect_to root_path
    end
  end
end

# app/controllers/admin/users_controller.rb
class Admin::UsersController < AdminController
   ...
end
Run Code Online (Sandbox Code Playgroud)


Tod*_*odd 17

在您的routes.rb中执行类似的操作:

  namespace :admin do
    resources :users
  end
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见http://guides.rubyonrails.org/routing.html.

然后在每个管理控制器中,您将需要一个before_filter:

before_filter :authorized?
def authorized?
    #check if authorized here.
end
Run Code Online (Sandbox Code Playgroud)


Jai*_*yer 9

正如Todd所说,你想添加一个命名空间的路由:

namespace :admin do
  resources :users
end
Run Code Online (Sandbox Code Playgroud)

您还需要将控制器,视图等放在名为"admin /"的每个部分的子文件夹中.如果你从头开始生成这个,很容易:

rails g controller admin/users
Run Code Online (Sandbox Code Playgroud)

这可能看起来相当复杂,但我有一篇文章介绍了所有这些,你可以下载一个示例rails 3应用程序来玩它:

Ruby on Rails中的路由3


K'a*_*'ao 6

然后在每个管理控制器中,您将需要一个before_filter:

before_filter :authorized?
def authorized?
  #check if authorized here.
end
Run Code Online (Sandbox Code Playgroud)

我认为如果他将这段代码放入一个继承自ApplicationController的主AdminController中会更好,那么每个管理控制器都会继承这个AdminController.

关于Rails3,是一篇关于路线的好文章