проблема создания канканских правил - PullRequest
1 голос
/ 30 ноября 2010

У меня есть приложение rails, которое содержит следующие модели - Пользователь, Блог, Пост, BlogMembership.

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

все пользователи могут отправлять сообщения в любой блог.

Подскажите пожалуйста - как правильно настроить правило в классе Ability для следующих отношенийсхема?

1 Ответ

0 голосов
/ 30 ноября 2010

А если вы попробуете этот синтаксис?

can :manage, Post do |action, post|
    post.blog.moderators.include? user
end
...