2016-06-04 7 views
0

Ich habe Benutzer in meiner App mit zwei verschiedenen Rollen, Student und Admin. Jeder Benutzer hat eine Feldreferenz team_id, die dem Benutzer mitteilt, zu welchem ​​Team er gehört. In diesem Fall besteht mein db aus diesen Tabellen: Benutzer, Teams.Muss ich für jede Benutzerrolle separate APIs-Endpunkte schreiben?

und ein Team Details zu zeigen, habe ich eine API wie unten: 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]); 
     } 
    } 

Gut, das für den Admin ist nur so der $ id als Argument übergeben wird, in Die URL, das bedeutet, dass nur der Administrator jede $ ID eingeben kann, während der normale Benutzer die ID automatisch zuordnen muss, abhängig davon, welchem ​​Team sie angehören (also in diesem Fall möchte ich die Teamdetails für das Team anzeigen, zu dem sie gehören).

so in diesem Fall meine api soll wie folgt aussehen: GET: api/Team

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]); 
      } 
     } 

Also meine letzte Frage ist, gibt es eine Möglichkeit, dass ich dies in einem Ort für beiden Rollen setzen kann. Es gibt also keine doppelten Funktionen für verschiedene Rollen.

Wie sollte die API in diesem Fall aussehen?

Dank

+0

Kannst du nicht einfach eine if-Anweisung verwenden? wenn 'if (Auth :: user() -> role == 'admin') {$ team = $ this-> teamService-> findById ($ id);} sonst {die andere query}' –

+0

@AchrafKhouadja, war ich Ich denke auf die gleiche Weise, aber wenn es normaler Benutzer ist, warum muss ich eine $ ID auf der URL übergeben, ich meine die ID auf der URL scheint nutzlos, und sollte ich es immer Null übergeben, wenn es ein normaler Benutzer ist? –

+0

dann können Sie eine Middlaware verwenden, überprüfen Sie, ob der Benutzer ein Admin ist, wenn ja -> Redirect zu einer Route beschränkt auf Admins mit der ID (auch mit Middleware) oder Redirect zu einer Route für einen normalen Benutzer, ohne die ID hinzufügen zu url –

Antwort

1

Muss ich für jede Benutzerrolle seperate APIs Endpunkt schreiben müssen?

Nein, definitiv nicht.

Wie sollte die API in diesem Fall aussehen?

Es gibt keine "richtige" Antwort, aber hier sind zwei Ideen:

1) Das User-Objekt sollte Links zu Ihrem Team bezweckt:

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

Dann Ihre /team/:id Route überprüfen sollte, "Wenn Sie nicht der Administratorbenutzer sind, geben Sie 404 ein, wenn der Benutzer nicht in diesem Team ist."

2) Wenn Sie wirklich denken, ein Benutzer benötigt, um ihre Team-Informationen zu erhalten, wie es eigene Anruf ist, können Sie eine /team Route haben. Aber das obige ist mehr Standard. Oder bieten Sie einen Link zum echten Teamobjekt an. (Warum? Weil es das Caching einfacher macht.)

+0

Sie sagen, die API sollte wie folgt aussehen: teams/{id}, richtig, wenn ja, was soll ich als id übergeben, wenn ich vom normalen Benutzer anrufe, sollte ich als null in die URL gehen? also wird der Aufruf lauten: Teams/null? das erscheint mir ziemlich komisch. Bitte, wenn Sie Ihre erste Option mehr erklären könnten? Das schätze ich! –

+0

Ja, Option # 1 ist "teams/{id}".Ich sage, dass ein anderer API-Aufruf dem Benutzer die spezifische URL zu dem Team mitteilen sollte, auf dem sie sich befinden. (Wenn der Benutzer beispielsweise ein eigenes Objekt abruft oder einen anderen Status abruft, hat er einen Link zu Ihrem Team). Wenn andererseits "Get my team data" der erste API-Aufruf ist, können Sie eine Route "/ team" verwenden. – BraveNewCurrency

+0

so wieder haben wir zwei Routen, richtig?/team und/team/{id}? eine für den normalen Benutzer und eine für den Administrator? Ich bin mir nicht ganz sicher ob ich dich verstanden habe ... –

Verwandte Themen