我目前正在保护我的应用,以便普通用户无法借助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%确定,并确保用户无法通过偷偷摸摸的变通方法来访问这些页面。
答案 0 :(得分:1)
是的,两者都需要。 Devise 回调将保证用户已注册,如果没有,它将抛出未经身份验证的错误。并且 CanCanCan 将保证您的用户能够进行更改,或者它将抛出和未经授权的错误。
正确知道两者匹配,但稍后您可能会改变您的能力,然后您不应该更改控制器,从一开始就更好。
编辑:我忘了提及它,但是有两个不同的错误可以让你以不同的方式处理它们。例如,要求未经身份验证的用户登录,并请未经授权的用户停止使用您的应用程序(或只是记录它)