Rails,CanCan管理所有&其他角色

时间:2013-01-25 13:30:54

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

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”,请不要理解为什么会发生这种情况。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

解决方案是:

班级能力   包括CanCan :: Ability   def初始化(用户)     @user = user || User.new

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

端 端

在视图中:

if can? :custom_action, @user

return 
  user = true
  admin = false

这不是完美的解决方案,但它有效