如何解决除了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 举报,一经查实,本站将立刻删除。