我是否需要为每个用户角色编写单独的API端点?

时间:2016-06-04 03:23:56

标签: php api laravel

我有用户进入我的应用程序,有两个不同的角色,学生和管理员。每个用户都有一个team_id字段引用,告诉用户它属于哪个团队。在这种情况下,我的数据库由以下表组成:用户,团队。

为了显示团队详细信息,我有一个如下API: GET: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]);
        }
    }

这只适用于admin,因为$ id作为参数传递到url中,这意味着只有admin可以放任何$ id,而普通用户id必须根据他们所属的团队自动关联(所以在这种情况下,我想展示他们所属团队的团队细节。

所以在这种情况下我的api应该是这样的: GET:api / teams

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应该是什么样子?

由于

1 个答案:

答案 0 :(得分:1)

  

我是否需要为每个用户角色编写单独的API端点?

不,绝对不是。

  

在这种情况下API应该是什么样的?

没有"对"回答,但这里有两个想法:

1)User对象应该包含指向您的团队对象的链接:

{ name: "bob", team_link: "/team/3" }

然后您的/team/:id路由应该检查"如果您不是管理员用户,如果用户不在此团队中,请提供404。"

2)如果您确实认为用户需要获得自己的团队信息,那么您可以拥有/team路线。但以上是更标准的。或者,提供指向真实团队对象的链接。 (为什么?因为它使缓存变得更容易。)