一般情况对于一个资源的CRUD操作,只有R(read)不需要admin身份验证就可以操作.
其余的都需要管理员才能进行.
下面是一个简单的管理员身份验证:
首先是在view中,将CUD的按钮加上判断,进行选择性隐藏
<% if admin? %>
<div id="admin">
<td><%= link_to 'Edit', edit_episode_path(episode) %></td>
<td><%= link_to 'Destroy', episode_path(episode), :confirm => 'Are you sure?', :method => :delete %></td>
</div>
<% if admin? %>
<div id="new">
<%= link_to 'New episode', new_episode_path %>
</div>
然后实现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
end
end
在admin的new视图中:
<% form_tag :url=>{:action=>"new" } do%>
<p>password: <%= text_field_tag :password %>
<%= submit_tag "submit" %></p>
<% end %>
实现了这些,就可以写admin?方法了
因为是在view中调用的方法,所以应该写在helper里,但是这个判断逻辑也应该出现在controller里,所以在全局的application.rb中,写入:
protected
def admin?
session[:password]=="foo"
end
这样写了,视图中是不能够调用到这个方法的.所以在protected上面应该写明:
helper_method :admin?
----
这样在视图中就实现了CUD按钮的隐藏..但是如此还是可以手工输入/new或者edit来实现管理员操作.所以一定还要在episodes_controller中加上before_filter
before_filter :authorize, :except=>[:index, :show]
protected
def authorize
if admin?
true
else
false
redirect_to login_path
end
end
def admin?
...
end
这样就搞定了!
其余的都需要管理员才能进行.
下面是一个简单的管理员身份验证:
首先是在view中,将CUD的按钮加上判断,进行选择性隐藏
<% if admin? %>
<div id="admin">
<td><%= link_to 'Edit', edit_episode_path(episode) %></td>
<td><%= link_to 'Destroy', episode_path(episode), :confirm => 'Are you sure?', :method => :delete %></td>
</div>
<% if admin? %>
<div id="new">
<%= link_to 'New episode', new_episode_path %>
</div>
然后实现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
end
end
在admin的new视图中:
<% form_tag :url=>{:action=>"new" } do%>
<p>password: <%= text_field_tag :password %>
<%= submit_tag "submit" %></p>
<% end %>
实现了这些,就可以写admin?方法了
因为是在view中调用的方法,所以应该写在helper里,但是这个判断逻辑也应该出现在controller里,所以在全局的application.rb中,写入:
protected
def admin?
session[:password]=="foo"
end
这样写了,视图中是不能够调用到这个方法的.所以在protected上面应该写明:
helper_method :admin?
----
这样在视图中就实现了CUD按钮的隐藏..但是如此还是可以手工输入/new或者edit来实现管理员操作.所以一定还要在episodes_controller中加上before_filter
before_filter :authorize, :except=>[:index, :show]
protected
def authorize
if admin?
true
else
false
redirect_to login_path
end
end
def admin?
...
end
这样就搞定了!
本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/113439,如需转载请自行联系原作者