Использование CanCanCan для ролей и моделей с несколькими разработками? - PullRequest
0 голосов
/ 08 марта 2019

Мне нужно использовать CanCanCan, чтобы ограничить возможность для всех пользователей только просматривать свои собственные данные или разрешить просматривать ограниченные данные от других.

Я пробовал следующее, но неработа:

class Ability
  include CanCan::Ability

      def initialize(user)

        user ||= User.new # guest user (not logged in)
        affiliate ||= Affiliate.new # guest user (not logged in)
        # guest ||= U
        #Admin
        if user.admin?
          can :manage, :all

        elsif user.seller?
            can :manage, Listing, user_id: user.id
            can :read, Listing
            can :manage, Order, buyer_id: user.id
            can :manage, Order, seller_id: user.id
            can :manage, StripeAccount, user_id: user.id

            can :manage, BankAccount, user_id: user.id
            can :manage, User, user_id: user.id

        elsif affiliate
            can :manage, User, affiliate_id: affiliate.id
            can :read, Order
            can :manage, StripeAccount, affiliate_id: affiliate.id
            can :manage, Affiliate, affiliate_id: affiliate.id


        #Buyer
        elsif user.buyer?
          can :read, Listing
          can [:create, :read, :edit, :purchases, :update], Order, buyer_id: user.id

        #Guest
        else
          can :read, Listing
          can [:create, :order_confirmation], Order
          # can :create, User
        end
      end
    end 

Когда я вошел в качестве партнера, он не позволяет мне просматривать StripeAccount, связанный с affiliate.id, и он есть в модели.

У меня есть две модели, Пользователь и Партнер.

Пользователь имеет роли enum, 1,2,3.(admin 3). Партнер имеет роли enum, 1,2

Мне нужно установить ограничение для каждой модели устройства и каждой роли в каждой модели устройства.

1 Ответ

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

Это, похоже, решило проблему, все еще тестируя:

private

  def current_ability
    @current_ability ||= Ability.new(current_user, current_affiliate)
  end

затем с:

def initialize(user, affiliate)
...