Как получить разрешение от отношений с помощью CanCanCan? - PullRequest
0 голосов
/ 08 марта 2019

В моем приложении у меня есть модель с именем User, которая имеет Tone.

В CanCanCan у меня есть эта способность:

class Ability
  include CanCan::Ability
  def initialize(user)

  if user.nil? 
    can :read, User
    can :read, Talent, is_public?: true
  else
    can :read, Talent, is_public?: true
  end

Моя страница отображается с помощью ProfilesController # show. Как это:

class ProfilesController < ApplicationController
  before_action :check_ability, except: [:show]
  def show

    @user = User.find(params[:id])
    authorize! :read, @user
    authorize! :read, @user.talent

    if current_user
      sent_connections = current_user.sent_connections
      connections  = sent_connections + current_user.all_connections
      @is_connected = !(connections.select { |c| c.user.id == @user.id }.empty?)
    end
    @top_5_photos = @user.top_5_photos
  end

Хорошо. Я пытаюсь сделать профиль, метод: is_public возвращает false. Но страница отображается правильно, хотя я ожидал, что пользователь не сможет увидеть страницу из-за правила:

   can :read, Talent, is_public?: true

Что мне здесь не хватает?

1 Ответ

2 голосов
/ 08 марта 2019

Если я правильно помню,

can :read, Talent, is_public?: true

^ is_public? выше, как ожидается, будет атрибутом по Канканкану.

Но поскольку is_public? - это пользовательский метод, то можете ли вы попробовать следующее?

can :read, Talent do |talent|
  talent.is_public?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...