1

次のモデルを含むレールアプリがあります-ユーザー、ブログ、投稿、ブログメンバーシップ。

class BlogMembership < ActiveRecord::Base
  belongs_to :user
  belongs_to :blog

  # Membership types:
  SUBSCRIBER = 0
  AUTHOR = 1
  MODERATOR = 2
end

class Blog < ActiveRecord::Base
  has_many :posts
  has_many :memberships, :class_name => "BlogMembership"

  # Blog memberships
  def subscribers
    self.memberships.where(:membership_type => [BlogMembership::SUBSCRIBER, BlogMembership::AUTHOR, BlogMembership::MODERATOR]).collect(&:user)
  end

  def authors
    self.memberships.where(:membership_type => [BlogMembership::AUTHOR, BlogMembership::MODERATOR]).collect(&:user)
  end

  def moderators
    self.memberships.where(:membership_type =>  BlogMembership::MODERATOR).collect(&:user)
  end
end

アビリティクラスでは(アクセス制限にcancanを使っているため)、ブログへのユーザーとモデレーターのアクセスを制限しようとしていますが、次のルールがあります

if user.is? :moderator
  can :manage, Post do |post|
    post.blog.moderators.include? user
  end
end

すべてのユーザーが任意のブログに投稿を送信できます。

教えてください - リレーションシップ スキームに従うためにアビリティ クラスでルールを適切に構成する方法を教えてください。

4

1 に答える 1

0

そして、この構文を試してみたら?

can :manage, Post do |action, post|
    post.blog.moderators.include? user
end
于 2010-11-30T01:27:13.730 に答える