Czyli tutaj:
Cytat
showDocumentElements(int DocumentId) nie pozwalała zobaczyć pozycji z nieswojego dokumentu
zamiast "zobaczyć pozycji z nieswojego dokumentu" powinno być raczej coś w stylu "zobaczyć tylko te pozycje w ramach dokumentu do których mamy dostęp". Zrozumiałem że chcesz to documentId weryfikować, jeśli chodzi o pobieranie z bazy tylko tych rekordów do których masz dostęp to sprawa się komplikuje i nie ma na to dobrego rozwiązania. Wiadomo, nie opłaca się pobrać wszystkich i na każdym wywoływać metody can więc jesteśmy zmuszeni zaszyć to w logice zapytania. Ja do tego celu używam
query scopes. Jeśli chcesz mieć to w jednym miejscu to w modelu możesz sobie za pomocą DI doładować konkretne Policy, a w samym Policy tworzyć metody typu "editQuery" itp. - osobiście sam tak lubię robić, ponieważ wtedy uprawnieniami dla danego modelu steruję w jednej klasie. W modelu masz wtedy tylko np. scopeWhereUserCanEdit(...) { return $this->policy->editQuery(...); } lub scopeEditableBy(...) { ... } (kwestia nazewnictwa należy już do Ciebie).
--- edit ---
Swoją drogą jest to jeden z nie do końca przemyślanych use casów, które nadal nie są rozwiązane, a przynajmniej ich rozwiązanie nie jest sugerowane przez Laravel. A praktycznie problem ten występuje w każdym projekcie. Podobnie ma się sprawa z eloquent eager loading i sortowaniem wyników po kolumnie pochodzącej właśnie z ładowanej relacji. Moim zdaniem powinien być jakiś sprytny mechanizm w eloquent który pozwala na sterowanie czy obiekty pochodzące z relacji mają być wczytywane osobnym zapytaniem czy jako joiny. Oczywiście ten drugi wariant aktualnie trzeba robić samemu, a jego implementacja we frameworku pewnie byłaby uciążliwa dlatego wciąż jest to kwestia otwarta. No ale to taki mały offtop, Eloquent jest tutaj jednak pewnym słabym ogniwem w tym frameworku.