-1
class Ability
  include CanCan::Ability
  def initialize(user)
    @user = user || User.new

    can :manage, :all
    can :custom_action, User, role: 'admin'
  end
end

そして視野に

if can? :custom_action, @user
  SHOW SOMETHING

これが常に「SHOW SOMETHING」を表示する場合、なぜそれが起こったのか理解できません。

4

2 に答える 2

1

それは、能力クラスでは、すべてのユーザーにすべての権利を与えるためです。

あなたはおそらくこのようなものを探しています:

def initialize(user)
  @user = user || User.new

  can :manage, :all

  # When user is an admin, grant her extra privileges
  if @user.is_admin?
    can :custom_action
  end
end

canこのように、条件付きで(を使用して)能力を定義します

于 2013-01-25T13:53:23.590 に答える
0

解決策は次のとおりです。

class Ability include CanCan::Ability def initialize(user) @user = user || User.new

can :manage, :all
cannot :custom_action, User, role: 'admin'

終了 終了

ビューで:

if can? :custom_action, @user

return 
  user = true
  admin = false

これは完璧な解決策ではありませんが、うまくいきます

于 2013-01-26T19:59:10.383 に答える