代码之家  ›  专栏  ›  技术社区  ›  Foysal Nibir

拉雷维尔,只显示车主的产品清单扔同一路线和多个型号

  •  1
  • Foysal Nibir  · 技术社区  · 6 年前

    我试图显示多个所有者的产品列表抛出相同的路线。

    http://example.com/store/public/products
    

    N、 我不想把 id

    现在,我有五张桌子。他们就像,

    用户表

    +----+---------+------+-------+----------+
    | id | role_id | name | email | password |
    +----+---------+------+-------+----------+
    

    +----+------+
    | id | role |
    +----+------+
    

    角色和用户具有 One-to-One 关系。 管理员可以查看所有产品,但经理只能查看其拥有的产品。起初,这似乎是一个容易的问题。

    面积表

    +----+------+---------+
    | id | area | user_id |
    +----+------+---------+
    

    每个区域都有多个部门。

    部门表

    +----+------+---------+
    | id | area | area_id |
    +----+------+---------+
    

    最后,每个产品都属于特定的部门。

    产品表

    +----+---------+---------------+
    | id | product | department_id |
    +----+---------+---------------+
    

    现在我想说的是,我的经理不允许展示其他经理管理下的产品,但是管理员可以展示所有产品。 checkRole User 模型。看起来像这样,

    public function checkRole(){
        return $this->role()->pluck('role')->first();
    }
    

    public function getProducts(Request $request, Product $products){
        $products = $products->newQuery();
    
        if (Auth::user()->checkRole() == "manager") {
            $products= $products->whereHas('department', 
                function($query){
                    $query->whereHas('area', 
                        function($query){
                            $query->where('user_id', Auth::id());
                        });
                })->orderBy('created_at' , 'desc')->get();
        }
    
        else{
            $products= $products->orderBy('created_at' , 'desc')->get();
        }
    
        return $products;
    }
    

    它能起作用,但有更好的方法吗?我是说扔 Middleware Policy . 我试过了 中间件 但问题是 Route 对每个用户都有效。

    0 回复  |  直到 6 年前