Я парень, который основал Forem (хотя волонтеры сделали большую часть тяжелой работы!), Я думаю, что могу ответить на этот вопрос.
Если вы хотите, чтобы только определенные группы имели доступ к одному и только одному форуму, вы можете поместить поле forum_id
в таблицу groups
и сделать это таким образом. Затем вы можете переопределить метод can_read_forem_forum?
в вашей модели User
, чтобы выполнить проверку прав доступа для этого пользователя:
def can_read_forem_forum?(forum)
groups.where(:forum_id => forum.id).any?
end
Используется в модели способностей Forem , чтобы определить, может ли человек получить доступ к форуму. Что этот метод собирается сделать, так это то, что он будет возвращать только группы для этого пользователя, которые имеют ссылку на этот конкретный форум. Если они есть, то известно, что пользователь может получить доступ к этому форуму.
Теперь, если вы идете другим путем, где группа может иметь доступ ко многим форумам, тогда вы должны определить таблицу соединений между groups
и forem_forums
(называемой forum_groups
) и определить ее как ассоциация в вашей Group
модели, например:
has_many :forum_groups
has_many :forums, :through => :forum_groups, :class_name => "Forem::Forum"
Вам также необходимо определить новую модель внутри вашего приложения для этой forum_groups
ассоциации, она будет называться ForumGroup
и будет выглядеть примерно так:
class ForumGroup < ActiveRecord::Base
belongs_to :forum, :class_name => "Forem::Forum"
belongs_to :group
end
Мы делаем это таким образом, чтобы у вас был простой способ управлять связями между форумами и группами. Если вы сделали has_and_belongs_to_many
, это обычно приводит к гигантской боли в заднице, когда вы хотите удалить одну конкретную запись из этой соединительной таблицы.
Теперь, когда все хорошо настроено, метод, который вы хотите определить в своей User
модели, будет таким:
def can_read_forem_forum?(forum)
groups.joins(:forums).where("forem_forums.id = ?", forum.id).any?
end
То же самое, за исключением того, что на этот раз мы находим все группы, которые связаны с конкретным форумом через ту ассоциацию, которую мы создали ранее. Это сделает INNER JOIN
для таблицы forum_groups
, а затем еще одну для таблицы forem_forums
, получив необходимые данные.
Надеюсь, это поможет вам, и спасибо за использование Forem!