Проблема: Я могу изменить 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?Или что-то еще, возможно?