我想在我的应用程序中有一个/ 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)
正如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应用程序来玩它:
然后在每个管理控制器中,您将需要一个before_filter:
Run Code Online (Sandbox Code Playgroud)before_filter :authorized? def authorized? #check if authorized here. end
我认为如果他将这段代码放入一个继承自ApplicationController的主AdminController中会更好,那么每个管理控制器都会继承这个AdminController.
关于Rails3,这是一篇关于路线的好文章
| 归档时间: |
|
| 查看次数: |
13188 次 |
| 最近记录: |