Как обрабатывать в представлениях модель, принадлежащую другому, и учитывая ее идентификатор, представление должно отображать различную информацию? - PullRequest
0 голосов
/ 02 октября 2018

Сейчас я делаю веб-сайт, и мне нужно реализовать эту функцию, так как тип пользователя «Клиент» принадлежит компании, поэтому, когда он входит в систему, клиент должен видеть представление об этой компании, я не уверен, как это сделать.справиться с этим, потому что он должен видеть идентификатор маршрута компании, например, сейчас, если пользователь типа администратора, я создал для него пространство имен, но это потому, что каждый администратор может видеть одну и ту же информацию, тип клиента должен видеть только компанию, которой он принадлежитЯ не уверен, что я должен использовать, сейчас мой маршрут для этого определен следующим образом:

resources :companies, param: :slug, only: :show do
  resources :clients
end

Это работает, но, например, если Клиент принадлежит компании Amazon и он входит в систему, онперенаправляется на companies / amazon / clients , и она отображает правильную информацию, но если он меняет маршрут на другой, например companies / adaddasdas / clients , она все равно показывает страницу синформация amazon, которая просто происходит, если я пытаюсь получить доступ к ресурсам внутри таких компаний, как: клиенты в этом примере,если я попытаюсь получить доступ к ресурсам самих компаний companies / amazon если я добавлю что-то другое, это не сработает

Я хочу знать, как вы, ребята, справляетесь с этим, когда пользовательская модельпринадлежит другому, но с учетом идентификатора (в моем случае slug) другой модели, пользователь должен иметь возможность видеть только информацию этого идентификатора, а также другие ресурсы для этой модели.Должен ли я использовать это или пространство имен, или пользовательский макет, я не уверен, как его решить, и нет документации по этой теме.

1 Ответ

0 голосов
/ 02 октября 2018

Как объяснено в комментариях, вы можете выполнить базовую проверку владения в контроллере клиента:

class Client < ApplicationController

before_action :check_client_owner

private 

def check_client_owner
    unless params[:slug].to_s == Client.find(params[:id]).company.slug.to_s
      redirect_to root_path
    end
end

end

Также вы можете сначала проверить, существует ли клиент.Если кто-то введет идентификатор клиента, который не существует, он вызовет ошибку при предыдущей проверке (Client.find(params[:id]) не удастся).

...