как убедиться, что идентификатор пользователя вложенного ресурса связан с заказом - PullRequest
0 голосов
/ 25 ноября 2018

Проблема: Я могу изменить user_id вложенного URL ресурса на любой идентификатор, и он все еще работает.Я не уверен, каким образом это происходит и как этого избежать.

благодаря cancancan gem, no1 может видеть заказ, который не связан ни с их аккаунтом ни для покупателя, ни для продавца.

Проблема заключается в том, что URL-адрес, например,

http://localhost:3000/users/1/orders/1/

, можно изменить на:

http://localhost:3000/users/121432121423/orders/1/

, и тот же порядок все еще отображается.

Вложенный маршрут:

  resources :users do
    resources :orders
  end

Модели:

order.rb
  belongs_to :buyer, class_name: "User"
  belongs_to :seller, foreign_key: :seller_id, class_name: "User"
user.rb
  has_many :sales, class_name: "Order", foreign_key: "seller_id"
  has_many :purchases, class_name: "Order", foreign_key: "buyer_id"

Способность модели CanCanCan: def initialize (пользователь)

  user ||= User.new # guest user (not logged in)
  #Admin
  if user.admin?
    can :manage, :all
  #Seller && Buyer
elsif user.seller? && user.buyer?
      can :manage, Listing, user_id: user.id
      can :read, Listing
      can :manage, Order, buyer_id: user.id
      can :manage, StripeAccount, user_id: user.id
      can :manage, BankAccount, user_id: user.id
      can :manage, User, user_id: user.id

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

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

Примечание: продавец автоматическипокупатель как покупатель логическое значение true при регистрации.(продавец не соответствует действительности и должен быть проверен администратором)

Как я могу сделать это в редком случае, когда пользователь случайно изменит номер user_id, он заблокирует его и покажет ошибку?

Это проблема модели или что-то, что можно определить с помощью cancancan?Или что-то еще, возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...