2

我有一个用导轨(和设计)构建的简单公告板系统。

我想将 cancan 添加到系统中,但我在定义一些规则时遇到了问题。

简而言之,我的应用程序有一个 User 模型、一个 Forum 模型和一个 ForumModerationModel。代码(简化):

class User < ActiveRecord::Base
  has_many :forum_moderations, dependent: :destroy, foreign_key: 'moderator_id'
  has_many :moderated_forums, through: :forum_moderations, source: 'moderated_forum'

class Forum < ActiveRecord::Base
  has_many :forum_moderations, dependent: :destroy

class ForumModeration < ActiveRecord::Base
  belongs_to :moderated_forum, class_name: 'Forum'
  belongs_to :moderator, class_name: 'User'

  validates_uniqueness_of :moderator_id, :scope => [:moderated_forum_id]
end

如您所见,用户可以管理N论坛,并且论坛可以由N用户管理。我的问题是:

如何:manage根据这些模型向 cancan 定义用户只能访问某些论坛?

我读过这篇文章: https ://github.com/ryanb/cancan/wiki/Defining-Abilities

但是由于我的 User 模型没有我可以用于此目的的列,所以我被卡住了。

4

1 回答 1

1

据我了解,您只需要正确定义您的条件即可。您需要将 current_forum 变量传递给初始化方法,然后使用它来确定 current_user 是否有权访问此论坛的审核。

def initialize(user, current_forum = nil)
  user ||= User.new # guest user (not logged in)
  if user.moderated_forums.include?(current_forum)
    # user is moderator
  else
    # user is not moderator
  end
end

您可以定义current_forumbefore_filter方法并放入您想要使用它的控制器或放入ApplicationController并放入skip_before_filter您不需要的控制器。

于 2013-04-30T19:49:20.783 回答