上次我介紹了如何做出最簡單的api,而其中有些漏洞,我希望對資料的CRUD時這些資料是跟該user相關的,沒有關聯的話操作會有很大的問題,我不希望看到其他使用者也能隨意對我的資料做CRUD。
之前介紹過的簡易trello專案,我會使用其中一支api當範例。
我再講一次我專案的架構吧
而我資料的關係為
例如現在我要製作一個api是顯示user所有的card,以下是我的controller內容:
public function index(Request $request)
{
$userData = $request->userData;
$cards = $userData->ShowCards;
foreach ($cards as $card) {
$card->ShowTasks;
}
return response()->json(['status' => true, 'user_data' => $userData], 200);
}
說明:
{
"status": true,
"user_data": {
"id": 3,
"username": "gill",
"email": "gill@gmail.com",
"image": "",
"created_at": "2020-09-15T04:01:19.000000Z",
"updated_at": "2020-10-07T07:02:46.000000Z",
"show_cards": [
{
"id": 9,
"card_name": "hello",
"create_user": "admin-fdd456",
"created_at": "2020-09-17T08:33:01.000000Z",
"updated_at": "2020-10-05T07:45:49.000000Z",
"private": false,
"pivot": {
"users_id": 3,
"card_id": 9
},
"show_tasks": [
{
"id": 7,
"title": "new task",
"status": false,
"create_user": "gill",
"update_user": "gill",
"description": "",
"tag": "",
"image": null,
"card_id": 9,
"created_at": "2020-10-07T07:04:01.000000Z",
"updated_at": "2020-10-07T07:04:01.000000Z"
}
]
},
{
"id": 13,
"card_name": "card name",
"create_user": "gill",
"created_at": "2020-09-25T10:28:55.000000Z",
"updated_at": "2020-09-25T10:28:55.000000Z",
"private": true,
"pivot": {
"users_id": 3,
"card_id": 13
},
"show_tasks": []
}
]
}
}
以上是我的方法,我將user有關聯的所有資料全都拿出來了,雖然這只有CRUD中的Read的部份,不過其他功能也一樣的。
例如你想要作card的CRUD,你只要在function的開始部份先關聯到該user的所有card,再使用where方法找到要修改的card,此方法就可以避免其他user對你的card作CRUD了。
向這樣經過關聯後再操作CRUD我們的使專案又更加嚴謹,不會單純只有CRUD功能,它能判斷你是否有資格操作這項資料。