我具有以下结构:
Action
-id
-name
-type
Routes
-id
-name
-controllers
User
-id
-name
-email
-password
-usergroup_id
Usergroup
-id
-name
-tenant_id
我想建立一种关系,我可以知道用户可以在特定路线上执行哪些操作,并且对于用户组也可以这样做,因为如果用户没有该操作,那么他所在组的操作将是已验证。
在这种情况下,我必须创建两个数据透视表吗?
Action_Routes_User
-action_id
-route_id
-user_id
Action_Routes_Usergroup
-action_id
-route_id
-usergroup_id
并在所有内容上通过belongsToMany,对吗?
我设法建立了这种关系,但是要获得X用户在给定路线中所执行的操作,这给我带来了一个问题:
// model User
public function routes()
{
return $this->belongsToMany(Route::class, 'action_route_user', 'user_id', 'route_id');
}
// model Route
public function actionsUser()
{
return $this->belongsToMany(Action::class, 'action_route_user', 'route_id', 'action_id');
}
当我执行 $ user-> routes 时,我得到了与该用户相关的所有路由,确定...
但是,例如,当我从上述集合中选择路线时:
$routes = $user->routes;
foreach($routes as $route) {
$routeActions = $route->actionsUser;
// here it is getting all actions regardless of user ID
}
示例:我登录的用户: Josef ,它采用了他拥有权限的路由 josef-> routes ,
但是当我选择以下一条路线时: $ route-> actionsUser ,这就像是在数据透视表 action_route_user 中查找所有用户操作,而不仅仅是用户:约瑟夫
我认为在提取此数据透视表时,缺少 user_id ,如果有的话,还有什么更好的放置方法?