vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

controller中三类用户(未知用户、普通用户、超级用户)操作action的权限分配

18:04 , vkill
UsersController 下有7个 action ,分别为 index show new edit create update destroy
下面就三类用户对action的操作权限做限制


未知用户 session[:userid] == nil
  只能注册新用户(new和create)

  before_filter :deny_unknownuser, :except => [:new, :create]
  def deny_unknownuser
    permission_denied if !islogin?
  end
  #这里还有一个问题,即 create 后会redirect_to 到 show,show上做权限没必要(个人觉得),所以这里改下 create ,改为提示注册成功后去登陆,不到show,这样就简单了
  def create
    @user = User.new(params[:user])
    respond_to do |format|
      if @user.save
        #flash[:notice] = 'User was successfully created.'
        #format.html { redirect_to(@user) }
        #format.xml  { render :xml => @user, :status => :created, :location => @user }
        #提示创建成功后跳转到登陆页面,auto_redirect为自己写的helper
        format.html { auto_redirect(:sec=>'3',:url=>login_page_path,:msg=>'User was successfully created.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end


普通用户 session[:userid] != nil , session[:is_admin] == false
  只能查看和修改自己的信息(show、edit和update)
  不能注册新用户(new和create)
  不能查看用户列表(index)
  不能删除用户(destroy)

  before_filter :deny_normaluser, :only => [:new, :create, :index, :destroy]
  before_filter :load_user, :only => [:show, :edit, :update, :destroy]
  def deny_normaluser
    permission_denied if islogin? and !isadmin?
  end
  #load_user,这个的目的是不能让用户去修改和查看别人的信息,当 show edit update 的时候会根据session[:userid] 来User.find
  #使用load_user的时候还要注意一个事项,我们使用load_user来定义@user ,那么show edit update destroy 这四个action 中的@user = User.find(params[:id]) 就都要注释掉了
  def load_user
    if isadmin?
      @user = User.find(params[:id])
    else
      @user = User.find(:first, :conditions=>["name = ?", userid()])
    end
  end


超级用户   session[:userid] != nil , session[:is_admin] == true
  无限制
类别:ruby & rails | Tags: , , , , , , | 0 条评论, 991 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: