我想将对某些页面的访问权限限制为仅记录用户。
这些页面的属性为“area = restricted”。
所以在我的控制器中,我将访问权限限制如下:
before_action find_page # Where we instantiate @page
before_action authenticate_user! only: [:show], :if => :restricted? , :unless => :logged_in?
在控制器中我越远
def restricted?
@page.area == "restricted" ? true : false
end
def logged_in?
current_user ? true : false
end
但出于某种原因,它没有工作......
您是否在代码中看到了明显的内容?
谢谢!
更新:
我通过将两个条件混合到一个方法中来简化上面的代码,如下所示:
before_action find_page # Where we instantiate @page
before_action authenticate_user!, only: [:show], :if => :must_be_authenticated
我的方法定义如下
def must_be_authenticated
puts "must_be_athenticated call"
return false if @page.area != "restricted" # If the area is not restricted no need for athentication
return false if user_signed_in? # If user is signed_in no need for athentication
return true
end
问题仍然存在,甚至字符串" must_be_athenticated call"没有写在日志中。所以似乎before_action :authenticate_user!, :if => :must_be_authenticated
被忽略了,因为在调试字符串的日志中没有打印出来,页面也没有被限制......
更新:
show方法定义如下:
def show
authorize! :show, @page
render template: "pages/show"
end