4

超簡単な質問があります。アプリ内のすべての製品を一覧表示するページがあります。そのページを管理者だけが閲覧できるようにしたいだけです。でも商品・新作はみんなにはっきりと見てもらいたい。

schema.rb

  create_table "users", :force => true do |t|
    t.string   "email"
    t.string   "password_hash"
    t.string   "password_salt"
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
    t.string   "name"
    t.boolean  "admin",           :default => false
  end

製品コントローラ

class ProductsController < ApplicationController
    before_filter :require_login
    before_filter :current_user, only: [:create, :destory]
    before_filter :correct_user, only: :destory

  def index
    @products = Product.all
  end

  def new 
    @product = Product.new
  end

  def create
  @product = current_user.products.new(params[:product])
    if @product.valid? 
      @product.save
        render "show", :notice => "Sale created!"
    else
        render "new", :notice => "Somehting went wrong!"
    end
end
4

6 に答える 6

8

コントローラーに入れる

before_filter :authorize_admin, only: :index

そしてapplication_controller.rbで

def authorize_admin
    redirect_to :back, status: 401 unless current_user.admin
    #redirects to previous page
end
于 2013-06-11T10:59:24.013 に答える
2

あなたのコントローラーで書く

before_filter :admin_user

そして、このような定義を作成します

private
def admin_user
  redirect_to(root_path) unless current_user && current_user.admin?
end
于 2013-06-11T11:50:20.823 に答える
1

ProductsController に、ユーザーが管理者であるかどうかを確認する関数を追加し、次のように保護するビューにフィルターを使用できます。

class ProductsController < ApplicationController

  before_filter :admin_user,     only: :index # here you specify the action (for views) to protect
  .
  .
  .
  private
  .
  .
    def admin_user
      redirect_to(root_url) unless current_user.admin?
    end
 end

私はあなたを助けることを願っています

于 2013-06-11T11:15:56.513 に答える
1

何を試しましたか?これは考えさせられる質問ではありません。管理者用のブール値があり、アクションを管理者のみに制限したいので、チェックしてくださいcurrent_user.admin

before_filter :require_admin, only: :index

private
  def require_admin
    if !current_user.admin
      if request.xhr?
        head :unauthorized # for asynchronous/api requests, if you want.
      else
        render 'access/no_access' and return # or whatever.
      end
    end
  end
于 2013-06-11T11:03:03.847 に答える
1

correct_userコントローラーのプライベートにメソッドとメソッドを追加admin_userするか、次の定義で別のメソッドを作成し、管理者に追加:only => :indexします。before_filter

before_filter :require_login
before_filter :correct_user
before_filter :admin_user, :only => :index


private

def correct_user
  redirect_to(root_path) if current_user.nil?  && !current_user.admin?
end

def admin_user
  redirect_to(root_path) unless current_user.admin?
end
于 2013-06-11T12:05:41.943 に答える
-1

Railscasts Episode超簡易認証を確認してください。

実際、Ryan Bates はゼロから認証を作成することの大ファンで、このトピックに関する多くのエピソードを作成しました。それらを見て、あなたは確かにいくつかの良いアイデアを得るでしょう.

于 2013-06-11T11:00:05.613 に答える