0 レビュー
0 回答
php-Laravel-PivotsforPolicyを介した関連情報へのアクセス
私はLaravelに比較的慣れていないので、最近、揺れているようには見えない問題に遭遇しました。
この投稿に関連するフィールドを含む3つのテーブルがあります:
- ユーザー-id
- Shipment_User-shipment_id、user_id
- Company_User-company_id、user_id
- 会社-id
- この現在のポリシーの設定を処理する方法を変更する必要があります。
- ポリシーよりも、またはポリシーと組み合わせて他の何かを使用して、この問題を処理するためのより良い方法はありますか?
複雑なため、ミドルウェアではなく、ポリシーを通じて以下を処理するように提案されています(ただし、提案があれば、もちろん調査します:))。とにかく、私がやりたいのは、ユーザーが任意の数の会社に所属している場合、それらの会社に添付されているすべての貨物を見ることができるというポリシー(および私のShipment、User、Companyモデルでは、関係は「belongsToMany」としてレイアウトされています。
したがって、次のことを想定します
Shipment #|Company ID(pivot table: company_shipment)
1 | 1
2 | 1
3 | 2
4 | 3
次に、ピボットテーブル(company_user)を介して会社1および2に関連付けられているユーザー#1は、出荷1、2、および3を表示できますが、4は表示できません。
これまでに作成したShipmentPolicyは次のとおりです。
<?php
namespace App\Policies;
use App\User;
use Auth;
use App\Shipment;
use App\Company;
use Illuminate\Auth\Access\HandlesAuthorization;
class ShipmentPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view the shipment.
*
* @param \App\User $user
* @param \App\Shipment $shipment
* @return mixed
*/
public function view(User $user, Shipment $shipment)
{
$user_company = Auth::user()->companies()->pluck('id');
$shipment_company = $shipment->companies->pluck('id');
return $shipment_company == $user_company;
}
/**
* Determine whether the user can create shipments.
*
* @param \App\User $user
* @return mixed
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the shipment.
*
* @param \App\User $user
* @param \App\Shipment $shipment
* @return mixed
*/
public function update(User $user, Shipment $shipment)
{
//
}
/**
* Determine whether the user can delete the shipment.
*
* @param \App\User $user
* @param \App\Shipment $shipment
* @return mixed
*/
public function delete(User $user, Shipment $shipment)
{
//
}
}
今、私の問題は、ユーザーが1つの会社に追加された場合、出荷を問題なく表示できるという問題から発生しますが、2に追加された場合(私がテストするのに苦労した限り)、失敗し、エラーが返されます。
私の質問は次のとおりです:
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。