微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决除了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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。