简单管理员验证


所属类别:开发技术

文章作者:fsjoy1983

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://fsjoy.blog.51cto.com/318484/113439一般情况对于一个资源的CRUD操作,只有R(read)不需要admin身份验证就可以操作.其余的都需要管理员才能进行.下面是一个简单的管理员身份验证:首先是在view中,将CUD的按钮加上判断,进行选择性隐藏<% if admin? %> <%= link_to 'Edit', edit_episode_path(episode) %> <%= link_to 'Destroy', episode_path(episode), :confirm => 'Are you sure?', :method => :delete %><% if admin? %><%= link_to 'New episode', new_episode_path %>然后实现admin?方法:这个方法怎么实现呢,有这么几步:设想可以通过一个页面让管理员输入密码,输入成功之后身份就是管理员,也就是admin?方法返回true值.先来实现这个逻辑.新建一个控制器,admin,在admin_controller中写两个方法,一个用来登录,一个用来注销.class AdminController < ApplicationController def new if session[:password]=params[:password] flash[:notice]="successful login" redirect_to(episodes_path) else flash[:notice]="password error" render :action=>"new" end end def destroy session[:password]=nil flash[:notice]="Logout successfully" redirect_to episodes_path endend在admin的new视图中:<% form_tag :url=>{:action=>"new" } do%>password: <%= text_field_tag :password %><%= submit_tag "submit" %><% end %>实现了这些,就可以写admin?方法了因为是在view中调用的方法,所以应该写在helper里,但是这个判断逻辑也应该出现在controller里,所以在全局的application.rb中,写入:protecteddef admin? session[:password]=="foo" end这样写了,视图中是不能够调用到这个方法的.所以在protected上面应该写明: helper_method :admin?----这样在视图中就实现了CUD按钮的隐藏..但是如此还是可以手工输入/new或者edit来实现管理员操作.所以一定还要在episodes_controller中加上before_filterbefore_filter :authorize, :except=>[:index, :show]protected def authorize if admin? true else false redirect_to login_path end end def admin? ... end这样就搞定了!本文出自 “李骥平” 博客,请务必保留此出处http://fsjoy.blog.51cto.com/318484/113439本文出自 51CTO.COM技术博客

相关信息

· 文本数据库操作

·  面试常见的问题

· 健康饮食 -肝脏篇

· 李维:C++圣战








....

43374 13566