Как обрабатывать разрешение в рельсах - PullRequest
1 голос
/ 04 августа 2020

Обычный пользователь добавляет сообщение в систему, затем у него есть возможность обновить и удалить это сообщение. В будущем он может захотеть назначить другим пользователям возможность редактировать, удалять, обновлять и т. Д. c.

Мои модели

class Post
  has_many :post_users
  has_many :users, through: :post_users
end

class PostUser
  belongs_to :post
  belongs_to :user
end

class User
  has_many :post_users
  has_many :posts, through: :post_users
end

Мне нужно что-то подобное в моих возможностях .rb

user ||= User.new # guest user (not logged in)

can :read, :all
can :manage, Post, postuser: postuser.user.id

Таким образом, я мог управлять сообщениями только тогда, когда в таблице clients_users есть запись с user_id и id этого сообщения. Как заставить его работать?

1 Ответ

0 голосов
/ 04 августа 2020

Я не использовал драгоценный камень канканкан. Но, прочитав ваше действие add_user и документацию по канканкану для Определение способностей для ассоциаций , я думаю, вам нужно определить свой код, подобный следующему:

class Ability
  include CanCan::Ability

  def initialize(user)
    if user.present?  # additional permissions for logged in users (they can read their own posts)
      can :manage, Post, post_users: { user_id: user.id }
    end
  end
end

Попробуйте и дайте мне знать, если вы сталкиваетесь с любыми проблемами. Возможно, потребуются некоторые исправления и изменения.

...