Настройка разрешений для соавторов - PullRequest
1 голос
/ 14 января 2011

Мое приложение встроено в rails 3, и я использую CanCan для обработки разрешений.

Я хочу, чтобы мои пользователи могли делиться своими проектами и сотрудничать с другими конкретными пользователями (вроде как Google Docsделает это).

Я просто хочу знать, какой будет лучшая практика для чего-то подобного.У меня есть модель Project и модель User прямо сейчас.

Должен ли я создать отношение has_many: through и вызвать таблицу соединений как Collaborators или как-то еще?Таким образом, проект принадлежит_ пользователю и has_many пользователям: через коллабораторов?

Я не думаю, что это должно быть слишком сложно, но я не делал таких отношений раньше, поэтому любой совет поможет.

Заранее спасибо!:)

1 Ответ

1 голос
/ 14 января 2011

Я думаю, что вы на правильном пути с Project, имеющим отношения многие ко многим с User.

Если вы не ожидаете, что ваша система разрешений будет более детальной, то мне кажется, что это разумное решение:

Создать таблицу соединений:

rails generate migration create_project_collaborators

<code>class CreateProjectCollaborators < ActiveRecord::Migration
  def self.up
    create_table :project_collaborators do |t|
      t.references :project
      t.references :user
    end
  end</p>

<p>def self.down
    drop_table :project_collaborators
  end
end

Добавьте отношение к моделям:

class Project < ActiveRecord::Base
  has_and_belongs_to_many :collaborators, :class_name => 'User', :join_table => 'project_collaborators'
end
class User < ActiveRecord::Base
  has_and_belongs_to_many :project_collaborations, :join_table => 'project_collaborators'
end

В вашем классе Ability вы можете использовать User#project_collaborations для соответствующей авторизации (оставьте это упражнение на ваше усмотрение!)

...