-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

如果总是显示“显示某些东西”,不明白为什么会发生这种情况。

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

解决方案是:

类能力包括 CanCan::Ability def initialize(user) @user = user || 新用户

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 回答