2011-06-28 10 views
10

私はPHPでの経験を持つ人からいくつかの提案が欲しかった。異なる役割を持つユーザーのために同じページを別々に表示する

私は、ユーザーの4種類がありますPHPのWebサイト作っています:だから(未登録) 1.ゲスト、登録 2. 3.特別privilagesに登録し、 4.管理者

を4つすべて同じページが異なって表示されます。

今私はifの条件を使用してそれをやっています。 すべてのページで、ユーザーのroleを確認してから、それに応じて多くのifステートメントを使用してページを表示しています。

これはコードが非常に大きくて丈夫で、すべてのページで条件を何度も確認する必要があります。

  1. これを行うより良い方法はありますか?

  2. これは大きな専門家のウェブサイトでどのように行われますか?

  3. 拡張質問: kohana 3.1のようなMVCフレームワークを使用して同じことを実行する最適な方法は何ですか?それはaclと関係がありますか?

+0

拡張回答:はい、ACLはアクセス制御リストです。基本的に「これはユーザーアカウントの詳細ページなので、「登録ユーザー」、「管理者」、「スーパーユーザー」、「神」の役割でアクセスできます。 – cypher

答えて

5

本当に必要なものによって異なります。

は、ページが完全に変化する大きな役割を持っている場合たとえば、私は何を示唆していると、別のテンプレートを作成することであり、彼らの「権限」

$permission = $_SESSION['type_user']; 
include '/path/to/file/with/permission/'.$permission.'/tpl.html'; 

に似たページで何かを持っているに応じて、それらを含めます
<?php 
//inside include.php you have the line similar to 
//$permission = isset($_SESSION['type_user']) && $_SESSION['type_user']!=''?$_SESSION['type_user']:'common'; 
require_once '/mast/config/include.php'; 
include '/path/to/file/with/permission/common/header.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_1.html'; 
include '/path/to/file/with/permission/common/tpl_2.html'; 
include '/path/to/file/with/permission/'.$permission.'/tpl_3.html'; 
include '/path/to/file/with/permission/common/footer.html'; 
?> 

スクリプトが「このテキストを表示する」、または「このボタンを表示する」のような小さな部品のいっぱいの場合、あなたはあなた

の権限をチェックする関数を作成することができます
<?php 
function can_user($action, $what){ 
    switch($action){ 
     case 'write': 
      return $your_current_if_on_what; 
      break; 
     case 'read': 
     default: 
      return $your_current_if_on_what; 
      break; 
    } 
} 
?> 

and the template will look like: 

[my html] 
<?=can_user('read','button')?'My Button':''?> 
[my html] 

コードを2回以上使用する場合は、関数/ファイルに別々に入れる必要があります。多くの "IFS"がある場合は、関数を作成する必要があります

+1

ありがとうございます。理解するまでに時間がかかりましたが、私はそれを得ました。どのようにこれは大きな専門家のウェブサイトによって行われている任意のアイデア? –

+0

大きな専門サイトではどういう意味でしょうか。私は大きなサイトのために走ったり開発したりしていますが、そのたびにパラメータが何であるかによって異なる解決策になります。たとえば、PHPがファイルシステムにアクセスするたびに大きなパフォーマンス上の問題がありますが、いくつかのアクセラレータ/オプティマイザが(eAcceleratorを使用して)助けてくれることがあることに注意してください。 – Fabrizio

+0

私の最後の2つの大きなサイト私が入れたいテンプレートが "can_user"に渡され、そのテンプレート名または別のテンプレート名がユーザーに許可されていないときに返された2つの組み合わせを使用しましたその部分を見る。 can_user( 'read'、 'button'、 'button_html'); 'のようなもので、can_user関数は' return $ this_user_can?$ template、 'permission_deny_in_page'; ' – Fabrizio

関連する問題