![](/img/trans.png)
[英]Admin Change Approval Status of User - Rails + Devise + Cancancan
[英]Cancancan Cant get it work with User and Admin
所以我用Cancancan宝石在我application.I具有与设计/ Omniauth宝石和管理员 ,他们用一个简单的自定义身份验证验证身份验证的用户 。 我想实现
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方法,却找不到它。
我还尝试为User.rb和Admin.rb中的枚举分配角色,并正确更改了能力.rb,但是我得到了一个未定义的方法admin? 对于用户错误
Cancancan Verion 2.0
我找到了一个可行的解决方案application_controller.rb
def current_ability
if current_user
return if current_admin.present?
@current_ability ||= Ability.new(current_user)
elsif current_admin
return unless current_admin.present?
@current_ability ||= Ability.new(current_admin)
end
end
结束
ability.rb
class Ability
include CanCan::Ability
def initialize(userOrAdmin)
if userOrAdmin.is_a? User
can :read, User
can [:update, :read], User, id: userOrAdmin.id
elsif userOrAdmin.is_a? Admin
can :read, Admin
can [:update, :read], Admin, id: userOrAdmin.id
end
end
end
虽然这没有错误。 每当我以用户和管理员身份登录时,管理员角色就会出现CanCan notauthorized错误。
经过一番搜索,我发现了一些有用的文章:
我建议您尝试以下方法:
# Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
# Everyone:
can :read, User
# Users:
return unless user.present?
can :manage, User, user_id: user.id
# Admins:
return unless user.admin?
can :manage, :all
end
end
# Routes.rb
devise_for :users # current_user:
devise_for :admins # current_admin:
# Application_Controller.rb
def current_ability
@current_ability ||= current_admin ? AdminAbility.new(current_admin) : UserAbility.new(current_user)
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.