简单管理员验证

简介:
一般情况对于一个资源的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

这样就搞定了!




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/113439,如需转载请自行联系原作者
目录
相关文章
|
安全 测试技术 数据安全/隐私保护
安全测试----用户同时采用两种校验方法,通过才可以登录成功
安全测试----用户同时采用两种校验方法,通过才可以登录成功
|
SQL 数据库连接 数据库
学生信息登录系统总结一
在敲学生系统的时候,进行登录学生管理学生信息登录,当时就是出师不利,还没有进入主界面就被卡在外面直接坐上了冷板凳,没想到道路刚开始就是如此坎坷,频繁报错那么就列举出3个具有代表性的问题,这个问题也是困扰了我许久,一直得不到解决,还是老办法站在巨人的肩膀上,通过查阅资料那些前辈们的的博客也是知道,不光自己也是遇到了类似的问题,通过借鉴大神的们的博客总结,让自己也是有了信心,感觉自己也能解决,但是事与愿违,往往想的都是很美好的,现实很残酷,跌宕起伏,排山倒海,猛龙过江,心情跟做过山车一样。
82 0
|
数据安全/隐私保护
密码重置测试小结
前言 实现密码重置功能的常见方法: 发送带有唯一 URL 的电子邮件以重置密码 2.使用临时密码或当前密码发送的电子邮件 3.询问私密问题,然后提供重置密码的选项 4.使用 OTP(一次性密码)或多因素身份验证
144 0
密码重置测试小结
|
前端开发 JavaScript 数据安全/隐私保护
Validform验证修改密码
前端页面、验证原密码后台代码、提交表单js代码、提交表单后台代码。
171 0
[导入]用户登录及验证用户是否登录的代码
用户登录及验证用户是否登录的代码文章来源:http://blog.csdn.net/jyk/archive/2006/08/15/1067382.aspx
692 0
|
数据安全/隐私保护
9、获取用户的详细信息接口,如果用户没有登录,我们提示用户登录
controller: //获取用户详细信息接口,当用户没有登录,我们强制让其登录 @RequestMapping(value = "get_information.
1143 0
|
网络虚拟化 数据安全/隐私保护
|
网络虚拟化 数据安全/隐私保护
|
Web App开发 数据安全/隐私保护 容器