CanCan has_many через, определенные способности - PullRequest
0 голосов
/ 02 февраля 2012

В настоящее время я делаю проект, используя devise и cancan.

Чтобы понять мою проблему, у меня есть следующие модели:

Пользователь с некоторыми атрибутами и логическим значением is_admin для глобального доступа

Роль принадлежит проекту и пользователю с определенными способностями для пользователя в каждом проекте

Проект 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 ]

2 голосов
/ 02 февраля 2012
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 голос
/ 02 февраля 2012

Вот более чистый способ организации вашего 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
...