我试图显示多个所有者的产品列表抛出相同的路线。
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
对每个用户都有效。