【发布时间】:2016-06-04 12:37:37
【问题描述】:
我的应用中有两个不同角色的用户,学生和管理员。每个用户都有一个 team_id 字段引用,它告诉用户它属于哪个团队。在这种情况下,我的数据库由这些表组成:用户、团队。
为了显示团队详细信息,我有一个如下 API: 获取:api/teams/{team_id}
public function show($id)
{
$team = $this->teamService->findById($id);
if ($team) {
return response()->json(['message' => 'Success', 'success' => true, 'status' => 200, 'data' => $team]);
} else {
return response()->json(['message' => 'Error', 'success' => true, 'status' => 404, 'data' => null]);
}
}
这仅适用于管理员,因为 $id 作为参数传递到 url,这意味着只有管理员可以输入任何 $id,而普通用户必须根据他们所属的团队自动关联 id(所以在这种情况下,我想显示他们所属团队的团队详细信息)。
所以在这种情况下,我的 api 应该如下所示: 获取:api/团队
public function show()
{
$team = $this->teamService->findById(Auth->user->team_id); //associate the team id for user logged in
if ($team) {
return response()->json(['message' => 'Success', 'success' => true, 'status' => 200, 'data' => $team]);
} else {
return response()->json(['message' => 'Error', 'success' => true, 'status' => 404, 'data' => null]);
}
}
所以我的最后一个问题是,有没有什么办法可以将这两个角色放在一个地方.. 这样就不会有不同角色的重复功能。
在这种情况下,API 应该是什么样子?
谢谢
【问题讨论】:
-
你不能只使用 if 语句吗?如果
if(Auth::user()->role == 'admin'){$team = $this->teamService->findById($id);} else { the other query} -
@AchrafKhouadja,我也是这么想的,但是如果是普通用户,为什么我需要在url上传递一个$id,我的意思是url上的id似乎没用,我应该如果它的普通用户总是将它传递给 null?
-
那么您可以使用中间件,如果是,则检查用户是否是管理员 -> 重定向到仅限于管理员使用 id 的路由(也使用中间件)或重定向到普通路由用户无需将 id 添加到 url