Я думаю, что вы на правильном пути с 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
для соответствующей авторизации (оставьте это упражнение на ваше усмотрение!)