1

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
4

1 に答える 1

4
if user.role? :super_admin

この行role?では、オブジェクトのメソッドをuserパラメーター:super_admin(シンボル) で呼び出し、メソッドが を返すかどうかを確認しますtrue

への呼び出しuser.role? :adminが false を返す場合、' admin ' という名前のロールが存在しない可能性があります。

Role Based Authorizationに関する CanCan のドキュメントを読むと、この問題が明らかになるはずです。

于 2010-09-19T06:13:11.303 に答える