Ruby on rails开发从头来(windows)(十七)-控制访问权限2011-12-02 博客园 Cure上次我们实现了登录的页面,现在我们区别管理员和普通用户,根据用户的不同身份,转入到不同的页面在rails中提供了filter来截获访问某个action的请求,可以用filter在action被调用前或调用后添加我们自己的处理。在这里,我们在admin的controller中的action被调用前添加拦截器。如果是管理员,就进入管理页面,如果是普通用户,就进入登录页面。1.在application.rb中给ApplicationController类添加authorize方法,代码如下:
def authorizeunless session[:user_id]flash[:notice] = "Please log in"redirect_to(:controller => "login", :action => "login")endend
然后在admin.rb文件里AdminController类开始的地方添加一行代码:
class AdminController < ApplicationControllerbefore_filter :authorize……
这样,我们就添加了一个拦截器,现在,AdminController中所有的action被调用前都会先调用authorize方法。我们还要修改login_controller.rb文件,给LoginController里添加一句代码:
class LoginController < ApplicationControllerbefore_filter :authorize, :except => :login……
2.现在,我们如果直接访问http://localhost:3003/admin/ship,将会直接定位到login页面,并且提示先请登录。如图:如果之前已经登录过,因为session还存在,所以不会看到效果,只要把浏览器关掉才重新定位admin/ship页面就可以了。