如何处理项目的权限,显示一个非授权页面来请求访问?

时间:2011-05-14 22:28:37

标签: ruby-on-rails ruby-on-rails-3 cancan

在我的应用中,我有拥有权限的项目。如果用户拥有项目的权限记录,则可以查看项目。如果没有,CanCan会将它们重定向到根目录。

我想要做的是,如果用户试图查看他们不是成员的项目(/ project / 100),请向他们展示允许他们请求加入的页面。

在CanCan中,我有以下内容:

if projectid_viewing && current_user.try(:role, projectid_viewing) == 'Member'
    can [:read, :members], Project
  ....

此CanCan功能非常适合允许成员查看项目,但非成员被踢到根目录。什么是处理这个的好方法,所以如果非成员试图查看项目,他们将被带到该项目的申请加入页面?

想法?感谢

1 个答案:

答案 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?,然后在必要时执行重定向。