这一系列的Ruby / Rails有什么作用?

时间:2010-09-18 21:19:22

标签: ruby-on-rails ruby-on-rails-3 cancan

你能指导我完成以下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

1 个答案:

答案 0 :(得分:4)

if user.role? :super_admin

在此行中,使用参数role?symbol)调用对象user上的方法:super_admin,并检查方法是否返回{{1} }}

如果对true的调用返回false,则可能根本没有名为“ admin ”的角色。

阅读CanCan关于Role Based Authorization的文档应该对这个问题有所了解。