Four different ways access control can fail. Each tab below isolates one CWE so you can focus on it. All four share the same root cause: the server trusts a user-supplied value to decide what data to return.
The profile endpoint loads PROFILES[id]. The id comes from the URL,
unsigned. Change the id, view anyone's profile — including the admin's.
return render(PROFILES[int(request.args['id'])]) # trusts the URL
Submit 1. Alice viewing alice — expected.
Submit 99 — that's the admin's id.