title: Multiple Policies for a Model in Laravel
body: <p>Does Laravel allow us to add multiple Policies for a Model? I.e. consider <code>App\Providers\ASuthServiceProvider</code>'s <code>$policies</code> property:</p>
  
  <pre><code>protected $policies = [
      'App\Team' =&gt; 'App\Policies\TeamPolicy',
      'App\Team' =&gt; 'App\Policies\RoundPolicy',
      'App\Team' =&gt; 'App\Policies\AnotherPolicy',
  ];
  </code></pre>
  
  <p>I haven't tested it in an application, because even if it worked, I would be here asking a similar question, regarding whether this is considered bad practise or prone to unexpected behaviour.</p>
  
  <p>The alternative I have is a very messy Policy, containing policies relating to several controllers, named in camel case:</p>
  
  <pre><code>/**
   * 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-&gt;id === $team-&gt;user_id || $user-&gt;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-&gt;id === $team-&gt;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-&gt;id === $team-&gt;user_id || $user-&gt;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-&gt;id === $team-&gt;user_id || $user-&gt;isAdmin();
  }
  </code></pre>
  
  <p>etc. etc.</p>