CanCan具有特定的能力

时间:2012-02-02 16:54:13

标签: ruby-on-rails-3 cancan

我目前正在使用设计和cancan制作项目。

为了解我的问题我有这个模型:

带有一些属性的

用户和全局访问的is_admin布尔值

角色 belongs_to项目和具有每个项目用户特定能力的用户

项目 has_many用户可以编辑或不编辑的其他模型(取决于它在项目中的角色)

所以我的问题是我该怎么做?

其实我有这个能力课程:

class Ability
  include CanCan::Ability
  def initialize(user)
    if user
      can :read, :all                   # allow everyone to read everything
      if user.is_admin?
        can :manage, :all
      end
    end
  end
end

我需要在模型中管理角色取决于我的项目模型还是其他什么? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

class Ability
  include CanCan::Ability
  def initialize(user)
    if user
      can :read, :all                   # allow everyone to read everything
      if user.is_admin?
        can :manage, :all
      end
      can manage, Project do |project|
          project.users.include? user
          #projects.users return the list of the users in the the role table.
      end
    end
  end
end

你可以自定义它,但我认为这是开始的好方法。

答案 1 :(得分:1)

这是一种更清洁的方式来组织您的Ability.rb。

def initialize(user)
  user ||= User.new # Set user to blank User.new if user isn't logged in.  

  # Everyone, including guests, can read everything
  can :read, :all

  # Will only let user manage if @project.admin_id == user.id 
  can :manage, Project, admin_id: user.id 

end