2012-04-08 27 views
30
def new 
    before_filter do 
     redirect_to "/" unless current_admin || current_company 
     flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company 

    end 
    CODE CODE CODE 
    end 

    def edit 
    before_filter do 
     redirect_to "/" unless current_admin.id = 5 
     flash[:notice] = 'You dont have enough permissions to be here' unless current_admin || current_company 

    end 
    CODE CODE CODE 
    end 

Đây là mã mà tôi muốn làm, nhưng tôi không thể tìm ra cách làm đúng. Điều tôi muốn đạt được là áp dụng quy tắc before_filter cho mỗi hành động của mình. Vì vậy, có lẽ một người dùng có thể acces de INDEX hành động nhưng không phải là hành động EDIT vv Tôi biết rằng phương pháp before_filter chạy một thời gian duy nhất, và tôi không thể chạy 4 before_filters, tôi chỉ đưa ra một số tài liệu tham khảo vì tiếng anh nghèo của tôi.Rails before_filter cho các hành động cụ thể trong bộ điều khiển

Bạn phải biết rằng tôi đang sử dụng Devise cho các phương pháp current_admin và current_company. Tôi cần áp dụng các bộ lọc khác nhau (nếu quản trị viên hoặc nếu company.id = X) và các hành động khác.

Cảm ơn trước, tôi khá mắc kẹt ở đây. Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

65

Tạo trong phương pháp ApplicationController của bạn:

def check_privileges! 
    redirect_to "/", notice: 'You dont have enough permissions to be here' unless current_admin || current_company 
end 

Và sau đó trong điều khiển của bạn:

before_filter :check_privileges!, only: [:new, :create, :edit, :save] 

Hoặc

before_filter :check_privileges!, except: [:index, :show] 
+1

Thank you very much này là chính xác những gì tôi cần. –

+0

Thành thật mà nói. Tôi không biết rằng cách của bạn cũng được chấp nhận. – Hauleth

+14

Trong Rails 4+, sử dụng 'before_action' thay vì' before_filter'. –

Các vấn đề liên quan