2017-06-30 9 views
1

マスターユーザーではないユーザーを/profilesの別のページにリダイレクトします。ユーザーフロスティングサイトでマスター以外のユーザーのダッシュボードをスキップする適切な方法

私は、管理者のふりかけを編集AdminController.phpでpageDashboard関数にこの単純なステートメントを追加することによって、これを達成した:私は私自身のふりかけにこれを移動したいが、私はありません

if(!$currentUser->isMaster()){ 
     header("Location: /profiles"); 
     exit; 
    } 

これを最善の方法で行うことが明確です。 AdminControllerを拡張した独自のコントローラを作成して、関数を置き換えるだけですか?それともそれを行うためのより純粋な方法がありますか?私が今働いているのは動作しますが、このファイルは将来の更新で上書きされるため、明らかに将来性はありません。

答えて

3

determineRedirectOnLoginサービスを使用して、ログイン後にユーザーがリダイレクトされる場所を変更できます。参照:https://learn.userfrosting.com/services/default-services#determineredirectonlogin。あなたの振りかけるServicesProviderでは、単純に似た何かをデフォルトのサービスを上書きする:あなたは、あなたがそう望むならroot以外のユーザーのためのダッシュボードへのアクセスを削除する許可システムを使用することができます

$container['determineRedirectOnLogin'] = function ($c) { 
    return function ($response) use ($c) 
    { 
     if (!$c->currentUser->isMaster()) { 
      return $response->withHeader('UF-Redirect', '/dashboard'); 
     } else { 
      return $response->withHeader('UF-Redirect', '/profiles');    
     } 
    }; 
}; 

サイドノートは、あなたが指摘したように、コアスプリンクルを編集してそのコードを自分のスプリンクルに移動しないでください。

+0

ありがとうございました。私はすでにこの方法を試みたが、名前空間とファイル自体の名前を混乱させてしまった(私は 'ServicesProvider.php'の代わりに私の' [sprinklename] ServicesProvider.php'と呼んでいた)私の質問に記載されているより鈍いアプローチを取る。一度ファイル名と名前空間を修正したらすべてうまくいった。 –

+0

ServicesProviderの名前のコンベンションが4.0.xから4.1.xに変更されました。その理由は多分 –

+0

Aha - そうですね。 –