除了cancan拒绝访问外,是否可能引发异常?

问题描述

我可以使用cancan控制权限。 我想将返回目的地(404,403)更改为特定条件

但是,除了CanCan::AccessDenied之外,我不知道如何使用cancan进行例外处理

让我知道您是否有想法。

下面是我的代码(如果状态为true,我想返回404,否则我想返回403)

模型

#app/models/ablity.rb
if current_user.status
  can :show,Organization # 404
else
  can :show,Organization # 403
end

控制器

  def index

    authorize! :show,Organization
  rescue CanCan::AccessDenied => e
    render_403 # if status true
    render_404 # if status false
  end

解决方法

我做了一些挖掘,但看起来CanCan不能支持您所需要的例外的粒度。

所以...为什么还要在控制器中也不使用current_user.status

def index
  authorize! :show,Organization
rescue CanCan::AccessDenied => e
  if current_user.status
    render_403
  else
    render_404
  end
end

(或者,如果您担心重复的代码/逻辑,请将它们都放在您在技能类和控制器中调用的方法中。)

然后将您的能力课程中的代码片段简化为以下内容:

can :show,Organization

顺便说一句,CanCan尚未维护in years。您可能需要切换到维护程度更高的CanCanCan(但我认为您将需要与上面相同的解决方案)。

此外,如果最终根据用户的状态(无论状态如何进行交流)显示不同的页面,则可能会无意间泄露了用户和/或非用户不应该看到的信息,类似于所解释的内容here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...