在我的应用中,我有拥有权限的项目。如果用户拥有项目的权限记录,则可以查看项目。如果没有,CanCan会将它们重定向到根目录。
我想要做的是,如果用户试图查看他们不是成员的项目(/ project / 100),请向他们展示允许他们请求加入的页面。
在CanCan中,我有以下内容:
if projectid_viewing && current_user.try(:role, projectid_viewing) == 'Member'
can [:read, :members], Project
....
此CanCan功能非常适合允许成员查看项目,但非成员被踢到根目录。什么是处理这个的好方法,所以如果非成员试图查看项目,他们将被带到该项目的申请加入页面?
想法?感谢
答案 0 :(得分:0)
假设您在控制器中使用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
您也可以手动检查控制器中的权限,而不是使用load_and_authorize_resource
您可以在控制器中运行can?
,然后在必要时执行重定向。