你能指导我完成以下Ruby / Rails系列吗?
if user.role? :super_admin
为了适合我的应用,我将其更新为:
if user.role? :admin
然后失败了,但随后我将其更新为:
if user.role? == 'admin'
它按预期工作。那是为什么?
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role? :super_admin
can :manage, :all
elsif user.role? :product_admin
can :manage, [Product, Asset, Issue]
elsif user.role? :product_team
can :read, [Product, Asset]
# manage products, assets he owns
can :manage, Product do |product|
product.try(:owner) == user
end
can :manage, Asset do |asset|
asset.assetable.try(:owner) == user
end
end
end
end
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
答案 0 :(得分:4)
if user.role? :super_admin
在此行中,使用参数role?
(symbol)调用对象user
上的方法:super_admin
,并检查方法是否返回{{1} }}
如果对true
的调用返回false,则可能根本没有名为“ admin ”的角色。
阅读CanCan关于Role Based Authorization的文档应该对这个问题有所了解。