Laravel - 通过政策支持获取相关信息

时间:2017-10-26 04:14:47

标签: php mysql laravel laravel-5 pivot-table

我对Laravel来说相对较新,最近遇到了一个我似乎无法动摇的问题。

我有3个表格,其中包含此帖子的相关字段:

  1. 用户 - id
  2. Shipment_User - shipment_id,user_id
  3. Company_User - company_id,user_id
  4. 公司 - id
  5. 由于复杂性,我被建议通过策略处理以下内容,而不是中间件(但是,如果你们其中一个人有建议,我当然愿意调查:))。无论如何,我想要做的是制定一项政策(我将在下面列出我现有的政策),如果用户连接到任何数量的公司,他们可以看到附加到这些公司的所有货物(和在我的发货,用户和公司模型上,我确实建立了关系" belongsToMany")。

    假设以下

    Shipment #|Company ID(pivot table: company_shipment)
    1   |    1
    2   |    1
    3   |    2
    4   |    3
    

    然后,通过数据透视表(company_user)与公司1和2关联的用户#1可以看到货件1,2和3,但不能看到货物。

    这是我到目前为止创建的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)
        {
            //
        }
    }
    

    现在,我的问题来自这样一个问题:如果用户被添加到一家公司,他们可以很好地查看货件,但是,如果他们被添加到2(这是我打扰测试),它失败并返回错误。

    所以我的问题是:

    1. 我如何处理当前政策的设置和
    2. 是否有更好的方法来处理这个问题而不是政策,或者与政策一起处理其他问题?

0 个答案:

没有答案