ruby-on-rails - 使用 cancan 让用户只管理一些模型

标签 ruby-on-rails ruby cancan

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

我想将 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某些论坛?

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

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

最佳答案

据我了解,您只需正确定义您的条件即可。您需要将 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_forum定义为before_filter方法并放入您想要使用它的 Controller 或放入ApplicationController并放入skip_before_filter 在 Controller 中你不需要这个。

关于ruby-on-rails - 使用 cancan 让用户只管理一些模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307468/

相关文章:

ruby-on-rails - 如何正确管理 rails tmp 目录?

ruby-on-rails - Rails应用程序变量生命周期问题

css - 如何 float 或显示内嵌表格

ruby-on-rails - 解析大型 XML 文件时获取 'Failed to allocate memory'

ruby-on-rails - 使用 ActiveRecord 在 PostgreSQL 中匹配数组值

ruby - git:从 bitbucket 导出并导入 github(带提交)

ruby-on-rails - Rspec Controller 错误,要求<"index">,但使用<""进行渲染>

ruby-on-rails - 使用 CanCan 指定拒绝访问的原因

ruby-on-rails - 带有 has_secure_password 的 rails4 : cancan or cancancan?

ruby-on-rails - Rails 中的哈希表