如果存在CanCan回调,我是否需要Devise回调?

时间:2016-01-25 14:53:48

标签: ruby-on-rails devise callback controller cancan

我目前正在保护我的应用,以便普通用户无法借助CanCanCan gem创建,编辑,更新或销毁某些对象。我也安装了Devise。两个gem都提供回调,因此除非满足某个条件,否则用户无法执行某些操作。

class ExampleController < ApplicationController
  before_action :authenticate_user!, except: [:index, :show] # Devise
  load_and_authorize_resource except: [:index, :show] # CanCanCan
end

在这种特殊情况下,如果用户是管理员,则他们应该只能拥有完全访问权限。我想知道在控制器中是否存在两个回调是否有点过分。

我看到它的方式是,如果用户不是管理员并且正在尝试创建对象,那么就不需要对它们进行身份验证。我想在思考方面100%确定,并确保用户无法通过偷偷摸摸的变通方法来访问这些页面。

1 个答案:

答案 0 :(得分:1)

是的,两者都需要。 Devise 回调将保证用户已注册,如果没有,它将抛出未经身份验证的错误。并且 CanCanCan 将保证您的用户能够进行更改,或者它将抛出和未经授权的错误。

正确知道两者匹配,但稍后您可能会改变您的能力,然后您不应该更改控制器,从一开始就更好。

编辑:我忘了提及它,但是有两个不同的错误可以让你以不同的方式处理它们。例如,要求未经身份验证的用户登录,并请未经授权的用户停止使用您的应用程序(或只是记录它)