【发布时间】:2026-02-08 11:55:02
【问题描述】:
所以我在我的应用程序中使用 Cancancan gem。我有 Users 通过 Devise/Omniauth gems 和 Admins 通过简单的自定义身份验证进行身份验证。 我要实现
ability.rb
def initialize(userOrAdmin)
if userOrAdmin.user?
can :read, User
return unless user.present?
can :manage, User, id: user.id
elsif userOrAdmin.admin?
can [:update, :read] , Admin, id: admin.id
end
end
end
但这不起作用。 我试图覆盖这样的能力方法
application_controller
def current_ability
if current_admin?
@current_ability ||= Ability.new(current_admin)
elsif current_user?
@current_ability ||= Ability.new(current_user)
end
end
但我收到 nomethod current_admin 错误,这可能是因为 Cancancan 假定来自设备的 current_admin 但我使用自己的 current_admin 方法却找不到它。 p>
我还尝试在 User.rb 和 Admin.rb 中使用枚举分配角色并正确更改ability.rb,但我得到了一个 未定义的方法管理员?对于用户错误
Cancancan 版本 2.0
【问题讨论】:
-
“但那不起作用” - 如何以及在哪里不起作用?您要授权什么操作?
-
你定义了
#current_admin?。注意?,如果你想检查当前管理员是否存在,你可以做current_admin.present? -
@MihaiTârnovan 我希望用户只有在他们是 current_user 时才能进行编辑,而对于管理员来说也一样,但也只有在他们是 current_admin 时才能显示。
-
@DavidS。我已经定义了 current_admin 这样 current_admin ||= Admin.find(session[:admin_id]) if session[:admin_id]
-
@MarkosTzetzis 准确地说,我认为您需要调用
current_admin.present?而不是current_admin?
标签: ruby-on-rails ruby cancancan