2017-01-12 3 views
2

Ermöglicht Laravel das Hinzufügen mehrerer Richtlinien für ein Modell? I.e. App\Providers\ASuthServiceProvider ‚s $policies Eigenschaft betrachten:Mehrere Richtlinien für ein Modell - Laravel

protected $policies = [ 
    'App\Team' => 'App\Policies\TeamPolicy', 
    'App\Team' => 'App\Policies\RoundPolicy', 
    'App\Team' => 'App\Policies\AnotherPolicy', 
]; 

Ich habe es nicht in einer Anwendung getestet, denn selbst wenn es funktioniert, würde ich hier eine ähnliche Frage zu stellen, darüber, ob dies als schlechte Praxis oder anfällig für unerwartete Verhalten.

Die Alternative ich eine sehr chaotische Politik ist haben, Richtlinien enthält, mehrere Controller beziehen, in Kamel Fall genannt:

/** 
* Allows coach of Team and admin to see the Team management view. 
* Used in TeamManagementController 
* 
* @param App\User $user 
* @param App\Team $team 
* @return boolean 
*/ 
public function manage(User $user, Team $team) 
{ 
    return $user->id === $team->user_id || $user->isAdmin(); 
} 

/** 
* Allows a coach to detach themself from a Team. 
* Used in TeamController 
* 
* @param App\User $user 
* @param App\Team $team 
* @return boolean 
*/ 
public function detach(User $user, Team $team) 
{ 
    return $user->id === $team->user_id; 
} 

/** 
* Below function are used for controllers other than TeamController and TeamManagementController. 
* Reason: We need to authorize, based on a Team. Hence, using this Policy. 
*/ 

/** 
* Allows coach of Team, as well as admin to view players of a Team. 
* Used in PlayerController 
* 
* @param App\User $user 
* @param App\Team $team 
* @return boolean 
*/ 
public function indexPlayers(User $user, Team $team) 
{ 
    return $user->id === $team->user_id || $user->isAdmin(); 
} 

/** 
* Allows coach of Team, as well as admin to view players of a Team as an array. 
* Used in PlayerController 
* 
* @param App\User $user 
* @param App\Team $team 
* @return boolean 
*/ 
public function fetchPlayers(User $user, Team $team) 
{ 
    return $user->id === $team->user_id || $user->isAdmin(); 
} 

etc. etc.

Beratung wird gebeten :)

+0

Vielleicht können Sie einfach eine Richtlinienklasse erweitern, um weitere Funktionen hinzuzufügen –

Antwort

1

Die Variable $policies verwendet das Modell als Schlüssel und als Wert einer Richtlinie. Schlüssel sind eindeutig, sodass Sie nur eine Richtlinie pro Modell festlegen können. Sie können jedoch eine Richtlinie für mehrere Modelle verwenden.

In Ihrem Fall ist der App\Policies\AnotherPolicy der einzige, der verwendet wird. Es hängt auch davon ab, was Sie tun möchten, wenn Sie mehreren Modellen dieselbe Richtlinie zuweisen. Im Grunde wollen Sie keinen unordentlichen oder groben Code. Wenn Sie also eine Richtlinie für zwei Modelle erstellen und der Richtliniencode zu groß wird, sollten Sie überlegen, ob das Erstellen einer anderen Richtlinie den Code einfacher/weniger grob macht.

Verwandte Themen