在我的应用程序中,我有具有权限的项目。如果用户具有项目的权限记录,他们可以查看该项目。如果没有,CanCanCan会将它们重定向到根目录。
我想做的是,如果用户尝试查看他们不是成员的项目(/project/100),请向他们显示一个允许他们请求加入的页面。
在CanCanCan,我有以下几点:
if projectid_viewing && current_user.try(:role, projectid_viewing) == 'Member'
can [:read, :members], Project
....
CanCan的这种功能非常适合允许成员查看项目,但非成员会被踢到根部。 处理这个问题的好方法是什么,因此,如果非成员尝试查看项目,他们将被带到该项目的"加入请求"页面?
想法?谢谢
假设您在控制器中使用load_and_authorize_resource
,cancan会在用户未授权时引发异常,您可以捕获它并定义行为。
class ApplicationController < ActionController::Base
rescue_from CanCan::AccessDenied do |exception|
redirect_to request_join_page if current_user.member?
end
end
您还可以在控制器中手动检查权限,而不是使用可以在控制器中运行can?
然后在必要时执行重定向load_and_authorize_resource
。